Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
772,861,080.805806250467043687 GBTC
Holders
1,490
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
68.7424593 GBTCValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
GigToken
Compiler Version
v0.4.19+commit.c4cbbb05
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-04-16 */ pragma solidity 0.4.19; /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; /** * @dev total number of tokens in existence */ function totalSupply() public view returns (uint256) { return totalSupply_; } /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); // SafeMath.sub will throw if there is not enough balance. balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } } contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _addedValue The amount of tokens to increase the allowance by. */ function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract Multivest is Ownable { using SafeMath for uint256; /* public variables */ mapping (address => bool) public allowedMultivests; /* events */ event MultivestSet(address multivest); event MultivestUnset(address multivest); event Contribution(address holder, uint256 value, uint256 tokens); modifier onlyAllowedMultivests(address _addresss) { require(allowedMultivests[_addresss] == true); _; } /* constructor */ function Multivest() public {} function setAllowedMultivest(address _address) public onlyOwner { allowedMultivests[_address] = true; MultivestSet(_address); } function unsetAllowedMultivest(address _address) public onlyOwner { allowedMultivests[_address] = false; MultivestUnset(_address); } function multivestBuy(address _address, uint256 _value) public onlyAllowedMultivests(msg.sender) { require(buy(_address, _value) == true); } function multivestBuy( address _address, uint8 _v, bytes32 _r, bytes32 _s ) public payable onlyAllowedMultivests(verify(keccak256(msg.sender), _v, _r, _s)) { require(_address == msg.sender && buy(msg.sender, msg.value) == true); } function verify(bytes32 _hash, uint8 _v, bytes32 _r, bytes32 _s) internal pure returns (address) { bytes memory prefix = "\x19Ethereum Signed Message:\n32"; return ecrecover(keccak256(prefix, _hash), _v, _r, _s); } function buy(address _address, uint256 _value) internal returns (bool); } library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract GigERC20 is StandardToken, Ownable { /* Public variables of the token */ uint256 public creationBlock; uint8 public decimals; string public name; string public symbol; string public standard; bool public locked; /* Initializes contract with initial supply tokens to the creator of the contract */ function GigERC20( uint256 _totalSupply, string _tokenName, uint8 _decimalUnits, string _tokenSymbol, bool _transferAllSupplyToOwner, bool _locked ) public { standard = "ERC20 0.1"; locked = _locked; totalSupply_ = _totalSupply; if (_transferAllSupplyToOwner) { balances[msg.sender] = totalSupply_; } else { balances[this] = totalSupply_; } name = _tokenName; // Set the name for display purposes symbol = _tokenSymbol; // Set the symbol for display purposes decimals = _decimalUnits; // Amount of decimals for display purposes creationBlock = block.number; } function setLocked(bool _locked) public onlyOwner { locked = _locked; } /* public methods */ function transfer(address _to, uint256 _value) public returns (bool) { require(locked == false); return super.transfer(_to, _value); } function approve(address _spender, uint256 _value) public returns (bool success) { if (locked) { return false; } return super.approve(_spender, _value); } function increaseApproval(address _spender, uint _addedValue) public returns (bool success) { if (locked) { return false; } return super.increaseApproval(_spender, _addedValue); } function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool success) { if (locked) { return false; } return super.decreaseApproval(_spender, _subtractedValue); } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { if (locked) { return false; } return super.transferFrom(_from, _to, _value); } } /* This contract manages the minters and the modifier to allow mint to happen only if called by minters This contract contains basic minting functionality though */ contract MintingERC20 is GigERC20 { using SafeMath for uint256; //Variables mapping (address => bool) public minters; uint256 public maxSupply; //Modifiers modifier onlyMinters () { require(true == minters[msg.sender]); _; } function MintingERC20( uint256 _initialSupply, uint256 _maxSupply, string _tokenName, uint8 _decimals, string _symbol, bool _transferAllSupplyToOwner, bool _locked ) public GigERC20(_initialSupply, _tokenName, _decimals, _symbol, _transferAllSupplyToOwner, _locked) { standard = "MintingERC20 0.1"; minters[msg.sender] = true; maxSupply = _maxSupply; } function addMinter(address _newMinter) public onlyOwner { minters[_newMinter] = true; } function removeMinter(address _minter) public onlyOwner { minters[_minter] = false; } function mint(address _addr, uint256 _amount) public onlyMinters returns (uint256) { if (true == locked) { return uint256(0); } if (_amount == uint256(0)) { return uint256(0); } if (totalSupply_.add(_amount) > maxSupply) { return uint256(0); } totalSupply_ = totalSupply_.add(_amount); balances[_addr] = balances[_addr].add(_amount); Transfer(address(0), _addr, _amount); return _amount; } } contract GigToken is MintingERC20 { SellableToken public crowdSale; // Pre ICO & ICO SellableToken public privateSale; bool public transferFrozen = false; uint256 public crowdSaleEndTime; mapping(address => uint256) public lockedBalancesReleasedAfterOneYear; modifier onlyCrowdSale() { require(crowdSale != address(0) && msg.sender == address(crowdSale)); _; } modifier onlySales() { require((privateSale != address(0) && msg.sender == address(privateSale)) || (crowdSale != address(0) && msg.sender == address(crowdSale))); _; } event MaxSupplyBurned(uint256 burnedTokens); function GigToken(bool _locked) public MintingERC20(0, maxSupply, "GigBit", 18, "GBTC", false, _locked) { standard = "GBTC 0.1"; maxSupply = uint256(1000000000).mul(uint256(10) ** decimals); } function setCrowdSale(address _crowdSale) public onlyOwner { require(_crowdSale != address(0)); crowdSale = SellableToken(_crowdSale); crowdSaleEndTime = crowdSale.endTime(); } function setPrivateSale(address _privateSale) public onlyOwner { require(_privateSale != address(0)); privateSale = SellableToken(_privateSale); } function freezing(bool _transferFrozen) public onlyOwner { transferFrozen = _transferFrozen; } function isTransferAllowed(address _from, uint256 _value) public view returns (bool status) { uint256 senderBalance = balanceOf(_from); if (transferFrozen == true || senderBalance < _value) { return false; } uint256 lockedBalance = lockedBalancesReleasedAfterOneYear[_from]; // check if holder tries to transfer more than locked tokens if (lockedBalance > 0 && senderBalance.sub(_value) < lockedBalance) { uint256 unlockTime = crowdSaleEndTime + 1 years; // fail if unlock time is not come if (crowdSaleEndTime == 0 || block.timestamp < unlockTime) { return false; } uint256 secsFromUnlock = block.timestamp.sub(unlockTime); // number of months over from unlock uint256 months = secsFromUnlock / 30 days; if (months > 12) { months = 12; } uint256 tokensPerMonth = lockedBalance / 12; uint256 unlockedBalance = tokensPerMonth.mul(months); uint256 actualLockedBalance = lockedBalance.sub(unlockedBalance); if (senderBalance.sub(_value) < actualLockedBalance) { return false; } } if (block.timestamp < crowdSaleEndTime && crowdSale != address(0) && crowdSale.isTransferAllowed(_from, _value) == false ) { return false; } return true; } function transfer(address _to, uint _value) public returns (bool) { require(isTransferAllowed(msg.sender, _value)); return super.transfer(_to, _value); } function transferFrom(address _from, address _to, uint _value) public returns (bool success) { // transferFrom & approve are disabled before end of ICO require((crowdSaleEndTime <= block.timestamp) && isTransferAllowed(_from, _value)); return super.transferFrom(_from, _to, _value); } function approve(address _spender, uint256 _value) public returns (bool success) { // transferFrom & approve are disabled before end of ICO require(crowdSaleEndTime <= block.timestamp); return super.approve(_spender, _value); } function increaseApproval(address _spender, uint _addedValue) public returns (bool success) { // transferFrom & approve are disabled before end of ICO require(crowdSaleEndTime <= block.timestamp); return super.increaseApproval(_spender, _addedValue); } function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool success) { // transferFrom & approve are disabled before end of ICO require(crowdSaleEndTime <= block.timestamp); return super.decreaseApproval(_spender, _subtractedValue); } function increaseLockedBalance(address _address, uint256 _tokens) public onlySales { lockedBalancesReleasedAfterOneYear[_address] = lockedBalancesReleasedAfterOneYear[_address].add(_tokens); } // burn tokens if soft cap is not reached function burnInvestorTokens( address _address, uint256 _amount ) public onlyCrowdSale returns (uint256) { require(block.timestamp > crowdSaleEndTime); require(_amount <= balances[_address]); balances[_address] = balances[_address].sub(_amount); totalSupply_ = totalSupply_.sub(_amount); Transfer(_address, address(0), _amount); return _amount; } // decrease max supply of tokens that are not sold function burnUnsoldTokens(uint256 _amount) public onlyCrowdSale { require(block.timestamp > crowdSaleEndTime); maxSupply = maxSupply.sub(_amount); MaxSupplyBurned(_amount); } } contract SellableToken is Multivest { uint256 public constant MONTH_IN_SEC = 2629743; GigToken public token; uint256 public minPurchase = 100 * 10 ** 5; uint256 public maxPurchase; uint256 public softCap; uint256 public hardCap; uint256 public startTime; uint256 public endTime; uint256 public maxTokenSupply; uint256 public soldTokens; uint256 public collectedEthers; address public etherHolder; uint256 public collectedUSD; uint256 public etherPriceInUSD; uint256 public priceUpdateAt; mapping(address => uint256) public etherBalances; Tier[] public tiers; struct Tier { uint256 discount; uint256 startTime; uint256 endTime; } event Refund(address _holder, uint256 _ethers, uint256 _tokens); event NewPriceTicker(string _price); function SellableToken( address _token, address _etherHolder, uint256 _startTime, uint256 _endTime, uint256 _maxTokenSupply, uint256 _etherPriceInUSD ) public Multivest() { require(_token != address(0) && _etherHolder != address(0)); token = GigToken(_token); require(_startTime < _endTime); etherHolder = _etherHolder; require((_maxTokenSupply == uint256(0)) || (_maxTokenSupply <= token.maxSupply())); startTime = _startTime; endTime = _endTime; maxTokenSupply = _maxTokenSupply; etherPriceInUSD = _etherPriceInUSD; priceUpdateAt = block.timestamp; } function setTokenContract(address _token) public onlyOwner { require(_token != address(0)); token = GigToken(_token); } function setEtherHolder(address _etherHolder) public onlyOwner { if (_etherHolder != address(0)) { etherHolder = _etherHolder; } } function setPurchaseLimits(uint256 _min, uint256 _max) public onlyOwner { if (_min < _max) { minPurchase = _min; maxPurchase = _max; } } function mint(address _address, uint256 _tokenAmount) public onlyOwner returns (uint256) { return mintInternal(_address, _tokenAmount); } function isActive() public view returns (bool); function isTransferAllowed(address _from, uint256 _value) public view returns (bool); function withinPeriod() public view returns (bool); function getMinEthersInvestment() public view returns (uint256) { return uint256(1 ether).mul(minPurchase).div(etherPriceInUSD); } function calculateTokensAmount(uint256 _value) public view returns (uint256 tokenAmount, uint256 usdAmount); function calculateEthersAmount(uint256 _tokens) public view returns (uint256 ethers, uint256 bonus); function updatePreICOMaxTokenSupply(uint256 _amount) public; // set ether price in USD with 5 digits after the decimal point //ex. 308.75000 //for updating the price through multivest function setEtherInUSD(string _price) public onlyAllowedMultivests(msg.sender) { bytes memory bytePrice = bytes(_price); uint256 dot = bytePrice.length.sub(uint256(6)); // check if dot is in 6 position from the last require(0x2e == uint(bytePrice[dot])); uint256 newPrice = uint256(10 ** 23).div(parseInt(_price, 5)); require(newPrice > 0); etherPriceInUSD = parseInt(_price, 5); priceUpdateAt = block.timestamp; NewPriceTicker(_price); } function mintInternal(address _address, uint256 _tokenAmount) internal returns (uint256) { uint256 mintedAmount = token.mint(_address, _tokenAmount); require(mintedAmount == _tokenAmount); soldTokens = soldTokens.add(_tokenAmount); if (maxTokenSupply > 0) { require(maxTokenSupply >= soldTokens); } return _tokenAmount; } function transferEthers() internal; function parseInt(string _a, uint _b) internal pure returns (uint) { bytes memory bresult = bytes(_a); uint res = 0; bool decimals = false; for (uint i = 0; i < bresult.length; i++) { if ((bresult[i] >= 48) && (bresult[i] <= 57)) { if (decimals) { if (_b == 0) break; else _b--; } res *= 10; res += uint(bresult[i]) - 48; } else if (bresult[i] == 46) decimals = true; } if (_b > 0) res *= 10 ** _b; return res; } } contract TokenAllocation is Ownable { using SafeERC20 for ERC20Basic; using SafeMath for uint256; address public ecosystemIncentive = 0xd339D9aeDFFa244E09874D65290c09d64b2356E0; address public marketingAndBounty = 0x26d6EF95A51BF0A2048Def4Fb7c548c3BDE37410; address public liquidityFund = 0x3D458b6f9024CDD9A2a7528c2E6451DD3b29e4cc; address public treasure = 0x00dEaFC5959Dd0E164bB00D06B08d972A276bf8E; address public amirShaikh = 0x31b17e7a2F86d878429C03f3916d17555C0d4884; address public sadiqHameed = 0x27B5cb71ff083Bd6a34764fBf82700b3669137f3; address public omairLatif = 0x92Db818bF10Bf3BfB73942bbB1f184274aA63833; uint256 public icoEndTime; address public vestingApplicature; address public vestingSimonCocking; address public vestingNathanChristian; address public vestingEdwinVanBerg; mapping(address => bool) public tokenInited; address[] public vestings; event VestingCreated( address _vesting, address _beneficiary, uint256 _start, uint256 _cliff, uint256 _duration, uint256 _periods, bool _revocable ); event VestingRevoked(address _vesting); function setICOEndTime(uint256 _icoEndTime) public onlyOwner { icoEndTime = _icoEndTime; } function initVesting() public onlyOwner() { require(vestingApplicature == address(0) && vestingSimonCocking == address(0) && vestingNathanChristian == address(0) && vestingEdwinVanBerg == address(0) && icoEndTime != 0 ); uint256 oneYearAfterIcoEnd = icoEndTime.add(1 years); vestingApplicature = createVesting( 0x760864dcdC58FDA80dB6883ce442B6ce44921Cf9, oneYearAfterIcoEnd, 0, 1 years, 2, false ); vestingSimonCocking = createVesting( 0x7f438d78a51886B24752941ba98Cc00aBA217495, oneYearAfterIcoEnd, 0, 1 years, 2, true ); vestingNathanChristian = createVesting( 0xfD86B8B016de558Fe39B1697cBf525592A233B2c, oneYearAfterIcoEnd, 0, 1 years, 2, true ); vestingEdwinVanBerg = createVesting( 0x2451A73F35874028217bC833462CCd90c72dbE6D, oneYearAfterIcoEnd, 0, 1 years, 2, true ); } function allocate(MintingERC20 token) public onlyOwner() { require(tokenInited[token] == false); tokenInited[token] = true; require(vestingApplicature != address(0)); require(vestingSimonCocking != address(0)); require(vestingNathanChristian != address(0)); require(vestingEdwinVanBerg != address(0)); uint256 tokenPrecision = uint256(10) ** uint256(token.decimals()); // allocate funds token.mint(ecosystemIncentive, 200000000 * tokenPrecision); token.mint(marketingAndBounty, 50000000 * tokenPrecision); token.mint(liquidityFund, 50000000 * tokenPrecision); token.mint(treasure, 200000000 * tokenPrecision); // allocate funds to founders token.mint(amirShaikh, 73350000 * tokenPrecision); token.mint(sadiqHameed, 36675000 * tokenPrecision); token.mint(omairLatif, 36675000 * tokenPrecision); // allocate funds to advisors token.mint(vestingApplicature, 1500000 * tokenPrecision); token.mint(vestingSimonCocking, 750000 * tokenPrecision); token.mint(vestingNathanChristian, 750000 * tokenPrecision); token.mint(vestingEdwinVanBerg, 300000 * tokenPrecision); } function createVesting( address _beneficiary, uint256 _start, uint256 _cliff, uint256 _duration, uint256 _periods, bool _revocable ) public onlyOwner() returns (PeriodicTokenVesting) { PeriodicTokenVesting vesting = new PeriodicTokenVesting( _beneficiary, _start, _cliff, _duration, _periods, _revocable ); vestings.push(vesting); VestingCreated(vesting, _beneficiary, _start, _cliff, _duration, _periods, _revocable); return vesting; } function revokeVesting(PeriodicTokenVesting _vesting, MintingERC20 token) public onlyOwner() { _vesting.revoke(token); VestingRevoked(_vesting); } } library SafeERC20 { function safeTransfer(ERC20Basic token, address to, uint256 value) internal { assert(token.transfer(to, value)); } function safeTransferFrom(ERC20 token, address from, address to, uint256 value) internal { assert(token.transferFrom(from, to, value)); } function safeApprove(ERC20 token, address spender, uint256 value) internal { assert(token.approve(spender, value)); } } contract TokenVesting is Ownable { using SafeMath for uint256; using SafeERC20 for ERC20Basic; event Released(uint256 amount); event Revoked(); // beneficiary of tokens after they are released address public beneficiary; uint256 public cliff; uint256 public start; uint256 public duration; bool public revocable; mapping (address => uint256) public released; mapping (address => bool) public revoked; /** * @dev Creates a vesting contract that vests its balance of any ERC20 token to the * _beneficiary, gradually in a linear fashion until _start + _duration. By then all * of the balance will have vested. * @param _beneficiary address of the beneficiary to whom vested tokens are transferred * @param _cliff duration in seconds of the cliff in which tokens will begin to vest * @param _duration duration in seconds of the period in which the tokens will vest * @param _revocable whether the vesting is revocable or not */ function TokenVesting(address _beneficiary, uint256 _start, uint256 _cliff, uint256 _duration, bool _revocable) public { require(_beneficiary != address(0)); require(_cliff <= _duration); beneficiary = _beneficiary; revocable = _revocable; duration = _duration; cliff = _start.add(_cliff); start = _start; } /** * @notice Transfers vested tokens to beneficiary. * @param token ERC20 token which is being vested */ function release(ERC20Basic token) public { uint256 unreleased = releasableAmount(token); require(unreleased > 0); released[token] = released[token].add(unreleased); token.safeTransfer(beneficiary, unreleased); Released(unreleased); } /** * @notice Allows the owner to revoke the vesting. Tokens already vested * remain in the contract, the rest are returned to the owner. * @param token ERC20 token which is being vested */ function revoke(ERC20Basic token) public onlyOwner { require(revocable); require(!revoked[token]); uint256 balance = token.balanceOf(this); uint256 unreleased = releasableAmount(token); uint256 refund = balance.sub(unreleased); revoked[token] = true; token.safeTransfer(owner, refund); Revoked(); } /** * @dev Calculates the amount that has already vested but hasn't been released yet. * @param token ERC20 token which is being vested */ function releasableAmount(ERC20Basic token) public view returns (uint256) { return vestedAmount(token).sub(released[token]); } /** * @dev Calculates the amount that has already vested. * @param token ERC20 token which is being vested */ function vestedAmount(ERC20Basic token) public view returns (uint256) { uint256 currentBalance = token.balanceOf(this); uint256 totalBalance = currentBalance.add(released[token]); if (now < cliff) { return 0; } else if (now >= start.add(duration) || revoked[token]) { return totalBalance; } else { return totalBalance.mul(now.sub(start)).div(duration); } } } contract PeriodicTokenVesting is TokenVesting { uint256 public periods; function PeriodicTokenVesting( address _beneficiary, uint256 _start, uint256 _cliff, uint256 _duration, uint256 _periods, bool _revocable ) public TokenVesting(_beneficiary, _start, _cliff, _duration, _revocable) { periods = _periods; } /** * @dev Calculates the amount that has already vested. * @param token ERC20 token which is being vested */ function vestedAmount(ERC20Basic token) public view returns (uint256) { uint256 currentBalance = token.balanceOf(this); uint256 totalBalance = currentBalance.add(released[token]); if (now < cliff) { return 0; } else if (now >= start.add(duration * periods) || revoked[token]) { return totalBalance; } else { uint256 periodTokens = totalBalance.div(periods); uint256 periodsOver = now.sub(start).div(duration) + 1; if (periodsOver >= periods) { return totalBalance; } return periodTokens.mul(periodsOver); } } } contract PrivateSale is SellableToken { uint256 public price; uint256 public discount; SellableToken public crowdSale; function PrivateSale( address _token, address _etherHolder, uint256 _startTime, uint256 _endTime, uint256 _maxTokenSupply, //14000000000000000000000000 uint256 _etherPriceInUSD ) public SellableToken( _token, _etherHolder, _startTime, _endTime, _maxTokenSupply, _etherPriceInUSD ) { price = 24800;// $0.2480 * 10 ^ 5 discount = 75;// $75% } function changeSalePeriod(uint256 _start, uint256 _end) public onlyOwner { if (_start != 0 && _start < _end) { startTime = _start; endTime = _end; } } function isActive() public view returns (bool) { if (soldTokens == maxTokenSupply) { return false; } return withinPeriod(); } function withinPeriod() public view returns (bool) { return block.timestamp >= startTime && block.timestamp <= endTime; } function calculateTokensAmount(uint256 _value) public view returns (uint256 tokenAmount, uint256 usdAmount) { if (_value == 0) { return (0, 0); } usdAmount = _value.mul(etherPriceInUSD); tokenAmount = usdAmount.div(price * (100 - discount) / 100); usdAmount = usdAmount.div(uint256(10) ** 18); if (usdAmount < minPurchase) { return (0, 0); } } function calculateEthersAmount(uint256 _tokens) public view returns (uint256 ethers, uint256 usdAmount) { if (_tokens == 0) { return (0, 0); } usdAmount = _tokens.mul((price * (100 - discount) / 100)); ethers = usdAmount.div(etherPriceInUSD); if (ethers < getMinEthersInvestment()) { return (0, 0); } usdAmount = usdAmount.div(uint256(10) ** 18); } function getStats(uint256 _ethPerBtc) public view returns ( uint256 start, uint256 end, uint256 sold, uint256 maxSupply, uint256 min, uint256 tokensPerEth, uint256 tokensPerBtc ) { start = startTime; end = endTime; sold = soldTokens; maxSupply = maxTokenSupply; min = minPurchase; uint256 usd; (tokensPerEth, usd) = calculateTokensAmount(1 ether); (tokensPerBtc, usd) = calculateTokensAmount(_ethPerBtc); } function setCrowdSale(address _crowdSale) public onlyOwner { require(_crowdSale != address(0)); crowdSale = SellableToken(_crowdSale); } function moveUnsoldTokens() public onlyOwner { require(address(crowdSale) != address(0) && now >= endTime && !isActive() && maxTokenSupply > soldTokens); crowdSale.updatePreICOMaxTokenSupply(maxTokenSupply.sub(soldTokens)); maxTokenSupply = soldTokens; } function updatePreICOMaxTokenSupply(uint256) public { require(false); } function isTransferAllowed(address, uint256) public view returns (bool) { return false; } function buy(address _address, uint256 _value) internal returns (bool) { if (_value == 0 || _address == address(0)) { return false; } uint256 tokenAmount; uint256 usdAmount; (tokenAmount, usdAmount) = calculateTokensAmount(_value); uint256 mintedAmount = mintInternal(_address, tokenAmount); collectedUSD = collectedUSD.add(usdAmount); require(usdAmount > 0 && mintedAmount > 0); collectedEthers = collectedEthers.add(_value); etherBalances[_address] = etherBalances[_address].add(_value); token.increaseLockedBalance(_address, mintedAmount); transferEthers(); Contribution(_address, _value, tokenAmount); return true; } function transferEthers() internal { etherHolder.transfer(this.balance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_privateSale","type":"address"}],"name":"setPrivateSale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"creationBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"crowdSaleEndTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"},{"name":"_amount","type":"uint256"}],"name":"burnInvestorTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_locked","type":"bool"}],"name":"setLocked","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"},{"name":"_tokens","type":"uint256"}],"name":"increaseLockedBalance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_minter","type":"address"}],"name":"removeMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_transferFrozen","type":"bool"}],"name":"freezing","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_amount","type":"uint256"}],"name":"mint","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"standard","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_from","type":"address"},{"name":"_value","type":"uint256"}],"name":"isTransferAllowed","outputs":[{"name":"status","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"crowdSale","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newMinter","type":"address"}],"name":"addMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"transferFrozen","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"privateSale","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"lockedBalancesReleasedAfterOneYear","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"locked","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"burnUnsoldTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"maxSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"minters","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_crowdSale","type":"address"}],"name":"setCrowdSale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_locked","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"burnedTokens","type":"uint256"}],"name":"MaxSupplyBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]
Contract Creation Code
6060604052600d805460a060020a60ff021916905534156200002057600080fd5b60405160208062001a3583398101604052808051600b54909250600091506040805190810160405280600681526020017f47696742697400000000000000000000000000000000000000000000000000008152506012604080519081016040908152600482527f4742544300000000000000000000000000000000000000000000000000000000602083015260038054600160a060020a03191633600160a060020a031617905560009087908790869086908690869086908051908101604052600981527f455243323020302e310000000000000000000000000000000000000000000000602082015260089080516200011f929160200190620002f5565b506009805460ff1916821515179055600186905581156200015c57600154600160a060020a03331660009081526020819052604090205562000179565b600154600160a060020a0330166000908152602081905260409020555b60068580516200018e929160200190620002f5565b506007838051620001a4929160200190620002f5565b50506005805460ff191660ff949094169390931790925550504360045550604090508051908101604052601081527f4d696e74696e67455243323020302e3100000000000000000000000000000000602082015260089080516200020d929160200190620002f5565b505050600160a060020a0333166000908152600a602052604090819020805460ff19166001179055600b9490945550919250829150505190810160405260088082527f4742544320302e31000000000000000000000000000000000000000000000000602083015290805162000288929160200190620002f5565b50600554620002b190633b9aca009060ff16600a0a6401000000006200113f620002bb82021704565b600b55506200039a565b600080831515620002d05760009150620002ee565b50828202828482811515620002e157fe5b0414620002ea57fe5b8091505b5092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200033857805160ff191683800117855562000368565b8280016001018555821562000368579182015b82811115620003685782518255916020019190600101906200034b565b50620003769291506200037a565b5090565b6200039791905b8082111562000376576000815560010162000381565b90565b61168b80620003aa6000396000f3006060604052600436106101925763ffffffff60e060020a60003504166306fdde038114610197578063095ea7b31461022157806309f68e9614610257578063176345141461027857806318160ddd1461029d57806318e3d998146102b05780631d1fe108146102c3578063211e28b6146102e557806323b872dd146102fd5780632a6adcec146103255780633092afd514610347578063313ce5671461036657806336a23dbf1461038f57806340c10f19146103a75780635a3b7e42146103c95780635eae177c146103dc57806366188463146103fe57806370a08231146104205780637770bd151461043f5780638da5cb5b1461046e57806395d89b4114610481578063983b2d5614610494578063a9059cbb146104b3578063ade4637a146104d5578063ba1f879f146104e8578063bace5bdb146104fb578063cf3090121461051a578063d0479abc1461052d578063d5abeb0114610543578063d73dd62314610556578063dd62ed3e14610578578063f2fde38b1461059d578063f46eccc4146105bc578063f4b5cbc4146105db575b600080fd5b34156101a257600080fd5b6101aa6105fa565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101e65780820151838201526020016101ce565b50505050905090810190601f1680156102135780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561022c57600080fd5b610243600160a060020a0360043516602435610698565b604051901515815260200160405180910390f35b341561026257600080fd5b610276600160a060020a03600435166106be565b005b341561028357600080fd5b61028b61071d565b60405190815260200160405180910390f35b34156102a857600080fd5b61028b610723565b34156102bb57600080fd5b61028b610729565b34156102ce57600080fd5b61028b600160a060020a036004351660243561072f565b34156102f057600080fd5b6102766004351515610823565b341561030857600080fd5b610243600160a060020a0360043581169060243516604435610851565b341561033057600080fd5b610276600160a060020a036004351660243561088a565b341561035257600080fd5b610276600160a060020a0360043516610934565b341561037157600080fd5b610379610970565b60405160ff909116815260200160405180910390f35b341561039a57600080fd5b6102766004351515610979565b34156103b257600080fd5b61028b600160a060020a03600435166024356109d4565b34156103d457600080fd5b6101aa610ace565b34156103e757600080fd5b610243600160a060020a0360043516602435610b39565b341561040957600080fd5b610243600160a060020a0360043516602435610d20565b341561042b57600080fd5b61028b600160a060020a0360043516610d3d565b341561044a57600080fd5b610452610d58565b604051600160a060020a03909116815260200160405180910390f35b341561047957600080fd5b610452610d67565b341561048c57600080fd5b6101aa610d76565b341561049f57600080fd5b610276600160a060020a0360043516610de1565b34156104be57600080fd5b610243600160a060020a0360043516602435610e20565b34156104e057600080fd5b610243610e41565b34156104f357600080fd5b610452610e62565b341561050657600080fd5b61028b600160a060020a0360043516610e71565b341561052557600080fd5b610243610e83565b341561053857600080fd5b610276600435610e8c565b341561054e57600080fd5b61028b610f19565b341561056157600080fd5b610243600160a060020a0360043516602435610f1f565b341561058357600080fd5b61028b600160a060020a0360043581169060243516610f3c565b34156105a857600080fd5b610276600160a060020a0360043516610f67565b34156105c757600080fd5b610243600160a060020a0360043516611002565b34156105e657600080fd5b610276600160a060020a0360043516611017565b60068054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106905780601f1061066557610100808354040283529160200191610690565b820191906000526020600020905b81548152906001019060200180831161067357829003601f168201915b505050505081565b600042600e54111515156106ab57600080fd5b6106b583836110d2565b90505b92915050565b60035433600160a060020a039081169116146106d957600080fd5b600160a060020a03811615156106ee57600080fd5b600d805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60045481565b60015490565b600e5481565b600c54600090600160a060020a03161580159061075a5750600c5433600160a060020a039081169116145b151561076557600080fd5b600e54421161077357600080fd5b600160a060020a03831660009081526020819052604090205482111561079857600080fd5b600160a060020a0383166000908152602081905260409020546107c1908363ffffffff6110f216565b600160a060020a0384166000908152602081905260409020556001546107ed908363ffffffff6110f216565b6001556000600160a060020a0384166000805160206116408339815191528460405190815260200160405180910390a350919050565b60035433600160a060020a0390811691161461083e57600080fd5b6009805460ff1916911515919091179055565b600042600e541115801561086a575061086a8483610b39565b151561087557600080fd5b610880848484611104565b90505b9392505050565b600d54600160a060020a0316158015906108b25750600d5433600160a060020a039081169116145b806108e05750600c54600160a060020a0316158015906108e05750600c5433600160a060020a039081169116145b15156108eb57600080fd5b600160a060020a0382166000908152600f6020526040902054610914908263ffffffff61112516565b600160a060020a039092166000908152600f602052604090209190915550565b60035433600160a060020a0390811691161461094f57600080fd5b600160a060020a03166000908152600a60205260409020805460ff19169055565b60055460ff1681565b60035433600160a060020a0390811691161461099457600080fd5b600d8054911515740100000000000000000000000000000000000000000274ff000000000000000000000000000000000000000019909216919091179055565b600160a060020a0333166000908152600a602052604081205460ff1615156001146109fe57600080fd5b60095460ff16151560011415610a16575060006106b8565b811515610a25575060006106b8565b600b54600154610a3b908463ffffffff61112516565b1115610a49575060006106b8565b600154610a5c908363ffffffff61112516565b600155600160a060020a038316600090815260208190526040902054610a88908363ffffffff61112516565b600160a060020a0384166000818152602081905260408082209390935590916000805160206116408339815191529085905190815260200160405180910390a350919050565b60088054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106905780601f1061066557610100808354040283529160200191610690565b6000806000806000806000806000610b508b610d3d565b600d5490985074010000000000000000000000000000000000000000900460ff16151560011480610b8057508988105b15610b8e5760009850610d12565b600160a060020a038b166000908152600f6020526040812054975087118015610bc5575086610bc3898c63ffffffff6110f216565b105b15610c6157600e546301e13380810196501580610be157508542105b15610bef5760009850610d12565b610bff428763ffffffff6110f216565b945062278d0085049350600c841115610c1757600c93505b600c87049250610c2d838563ffffffff61113f16565b9150610c3f878363ffffffff6110f216565b905080610c52898c63ffffffff6110f216565b1015610c615760009850610d12565b600e5442108015610c7c5750600c54600160a060020a031615155b8015610cff5750600c54600160a060020a0316635eae177c8c8c60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610ce257600080fd5b6102c65a03f11515610cf357600080fd5b50505060405180511590505b15610d0d5760009850610d12565b600198505b505050505050505092915050565b600042600e5411151515610d3357600080fd5b6106b5838361116a565b600160a060020a031660009081526020819052604090205490565b600c54600160a060020a031681565b600354600160a060020a031681565b60078054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106905780601f1061066557610100808354040283529160200191610690565b60035433600160a060020a03908116911614610dfc57600080fd5b600160a060020a03166000908152600a60205260409020805460ff19166001179055565b6000610e2c3383610b39565b1515610e3757600080fd5b6106b5838361118a565b600d5474010000000000000000000000000000000000000000900460ff1681565b600d54600160a060020a031681565b600f6020526000908152604090205481565b60095460ff1681565b600c54600160a060020a031615801590610eb45750600c5433600160a060020a039081169116145b1515610ebf57600080fd5b600e544211610ecd57600080fd5b600b54610ee0908263ffffffff6110f216565b600b557f7174e2dc81bf5de8f9bf1dd00b511763f2ffb109c06de0f447be45348cc75af58160405190815260200160405180910390a150565b600b5481565b600042600e5411151515610f3257600080fd5b6106b583836111a7565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b60035433600160a060020a03908116911614610f8257600080fd5b600160a060020a0381161515610f9757600080fd5b600354600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600a6020526000908152604090205460ff1681565b60035433600160a060020a0390811691161461103257600080fd5b600160a060020a038116151561104757600080fd5b600c805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03838116919091179182905516633197cbb66000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156110b257600080fd5b6102c65a03f115156110c357600080fd5b5050506040518051600e555050565b60095460009060ff16156110e8575060006106b8565b6106b583836111c7565b6000828211156110fe57fe5b50900390565b60095460009060ff161561111a57506000610883565b610880848484611233565b60008282018381101561113457fe5b8091505b5092915050565b6000808315156111525760009150611138565b5082820282848281151561116257fe5b041461113457fe5b60095460009060ff1615611180575060006106b8565b6106b583836113a1565b60095460009060ff161561119d57600080fd5b6106b5838361149b565b60095460009060ff16156111bd575060006106b8565b6106b5838361159b565b600160a060020a03338116600081815260026020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b6000600160a060020a038316151561124a57600080fd5b600160a060020a03841660009081526020819052604090205482111561126f57600080fd5b600160a060020a03808516600090815260026020908152604080832033909416835292905220548211156112a257600080fd5b600160a060020a0384166000908152602081905260409020546112cb908363ffffffff6110f216565b600160a060020a038086166000908152602081905260408082209390935590851681522054611300908363ffffffff61112516565b600160a060020a0380851660009081526020818152604080832094909455878316825260028152838220339093168252919091522054611346908363ffffffff6110f216565b600160a060020a03808616600081815260026020908152604080832033861684529091529081902093909355908516916000805160206116408339815191529085905190815260200160405180910390a35060019392505050565b600160a060020a033381166000908152600260209081526040808320938616835292905290812054808311156113fe57600160a060020a033381166000908152600260209081526040808320938816835292905290812055611435565b61140e818463ffffffff6110f216565b600160a060020a033381166000908152600260209081526040808320938916835292905220555b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020547f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925915190815260200160405180910390a35060019392505050565b6000600160a060020a03831615156114b257600080fd5b600160a060020a0333166000908152602081905260409020548211156114d757600080fd5b600160a060020a033316600090815260208190526040902054611500908363ffffffff6110f216565b600160a060020a033381166000908152602081905260408082209390935590851681522054611535908363ffffffff61112516565b60008085600160a060020a0316600160a060020a031681526020019081526020016000208190555082600160a060020a031633600160a060020a03166000805160206116408339815191528460405190815260200160405180910390a350600192915050565b600160a060020a0333811660009081526002602090815260408083209386168352929052908120546115d3908363ffffffff61112516565b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020849055919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591905190815260200160405180910390a3506001929150505600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820952cb2b31753a4a8295f98061add2ace92fba423d54132081121701fca0dfcb600290000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6060604052600436106101925763ffffffff60e060020a60003504166306fdde038114610197578063095ea7b31461022157806309f68e9614610257578063176345141461027857806318160ddd1461029d57806318e3d998146102b05780631d1fe108146102c3578063211e28b6146102e557806323b872dd146102fd5780632a6adcec146103255780633092afd514610347578063313ce5671461036657806336a23dbf1461038f57806340c10f19146103a75780635a3b7e42146103c95780635eae177c146103dc57806366188463146103fe57806370a08231146104205780637770bd151461043f5780638da5cb5b1461046e57806395d89b4114610481578063983b2d5614610494578063a9059cbb146104b3578063ade4637a146104d5578063ba1f879f146104e8578063bace5bdb146104fb578063cf3090121461051a578063d0479abc1461052d578063d5abeb0114610543578063d73dd62314610556578063dd62ed3e14610578578063f2fde38b1461059d578063f46eccc4146105bc578063f4b5cbc4146105db575b600080fd5b34156101a257600080fd5b6101aa6105fa565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101e65780820151838201526020016101ce565b50505050905090810190601f1680156102135780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561022c57600080fd5b610243600160a060020a0360043516602435610698565b604051901515815260200160405180910390f35b341561026257600080fd5b610276600160a060020a03600435166106be565b005b341561028357600080fd5b61028b61071d565b60405190815260200160405180910390f35b34156102a857600080fd5b61028b610723565b34156102bb57600080fd5b61028b610729565b34156102ce57600080fd5b61028b600160a060020a036004351660243561072f565b34156102f057600080fd5b6102766004351515610823565b341561030857600080fd5b610243600160a060020a0360043581169060243516604435610851565b341561033057600080fd5b610276600160a060020a036004351660243561088a565b341561035257600080fd5b610276600160a060020a0360043516610934565b341561037157600080fd5b610379610970565b60405160ff909116815260200160405180910390f35b341561039a57600080fd5b6102766004351515610979565b34156103b257600080fd5b61028b600160a060020a03600435166024356109d4565b34156103d457600080fd5b6101aa610ace565b34156103e757600080fd5b610243600160a060020a0360043516602435610b39565b341561040957600080fd5b610243600160a060020a0360043516602435610d20565b341561042b57600080fd5b61028b600160a060020a0360043516610d3d565b341561044a57600080fd5b610452610d58565b604051600160a060020a03909116815260200160405180910390f35b341561047957600080fd5b610452610d67565b341561048c57600080fd5b6101aa610d76565b341561049f57600080fd5b610276600160a060020a0360043516610de1565b34156104be57600080fd5b610243600160a060020a0360043516602435610e20565b34156104e057600080fd5b610243610e41565b34156104f357600080fd5b610452610e62565b341561050657600080fd5b61028b600160a060020a0360043516610e71565b341561052557600080fd5b610243610e83565b341561053857600080fd5b610276600435610e8c565b341561054e57600080fd5b61028b610f19565b341561056157600080fd5b610243600160a060020a0360043516602435610f1f565b341561058357600080fd5b61028b600160a060020a0360043581169060243516610f3c565b34156105a857600080fd5b610276600160a060020a0360043516610f67565b34156105c757600080fd5b610243600160a060020a0360043516611002565b34156105e657600080fd5b610276600160a060020a0360043516611017565b60068054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106905780601f1061066557610100808354040283529160200191610690565b820191906000526020600020905b81548152906001019060200180831161067357829003601f168201915b505050505081565b600042600e54111515156106ab57600080fd5b6106b583836110d2565b90505b92915050565b60035433600160a060020a039081169116146106d957600080fd5b600160a060020a03811615156106ee57600080fd5b600d805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60045481565b60015490565b600e5481565b600c54600090600160a060020a03161580159061075a5750600c5433600160a060020a039081169116145b151561076557600080fd5b600e54421161077357600080fd5b600160a060020a03831660009081526020819052604090205482111561079857600080fd5b600160a060020a0383166000908152602081905260409020546107c1908363ffffffff6110f216565b600160a060020a0384166000908152602081905260409020556001546107ed908363ffffffff6110f216565b6001556000600160a060020a0384166000805160206116408339815191528460405190815260200160405180910390a350919050565b60035433600160a060020a0390811691161461083e57600080fd5b6009805460ff1916911515919091179055565b600042600e541115801561086a575061086a8483610b39565b151561087557600080fd5b610880848484611104565b90505b9392505050565b600d54600160a060020a0316158015906108b25750600d5433600160a060020a039081169116145b806108e05750600c54600160a060020a0316158015906108e05750600c5433600160a060020a039081169116145b15156108eb57600080fd5b600160a060020a0382166000908152600f6020526040902054610914908263ffffffff61112516565b600160a060020a039092166000908152600f602052604090209190915550565b60035433600160a060020a0390811691161461094f57600080fd5b600160a060020a03166000908152600a60205260409020805460ff19169055565b60055460ff1681565b60035433600160a060020a0390811691161461099457600080fd5b600d8054911515740100000000000000000000000000000000000000000274ff000000000000000000000000000000000000000019909216919091179055565b600160a060020a0333166000908152600a602052604081205460ff1615156001146109fe57600080fd5b60095460ff16151560011415610a16575060006106b8565b811515610a25575060006106b8565b600b54600154610a3b908463ffffffff61112516565b1115610a49575060006106b8565b600154610a5c908363ffffffff61112516565b600155600160a060020a038316600090815260208190526040902054610a88908363ffffffff61112516565b600160a060020a0384166000818152602081905260408082209390935590916000805160206116408339815191529085905190815260200160405180910390a350919050565b60088054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106905780601f1061066557610100808354040283529160200191610690565b6000806000806000806000806000610b508b610d3d565b600d5490985074010000000000000000000000000000000000000000900460ff16151560011480610b8057508988105b15610b8e5760009850610d12565b600160a060020a038b166000908152600f6020526040812054975087118015610bc5575086610bc3898c63ffffffff6110f216565b105b15610c6157600e546301e13380810196501580610be157508542105b15610bef5760009850610d12565b610bff428763ffffffff6110f216565b945062278d0085049350600c841115610c1757600c93505b600c87049250610c2d838563ffffffff61113f16565b9150610c3f878363ffffffff6110f216565b905080610c52898c63ffffffff6110f216565b1015610c615760009850610d12565b600e5442108015610c7c5750600c54600160a060020a031615155b8015610cff5750600c54600160a060020a0316635eae177c8c8c60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610ce257600080fd5b6102c65a03f11515610cf357600080fd5b50505060405180511590505b15610d0d5760009850610d12565b600198505b505050505050505092915050565b600042600e5411151515610d3357600080fd5b6106b5838361116a565b600160a060020a031660009081526020819052604090205490565b600c54600160a060020a031681565b600354600160a060020a031681565b60078054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106905780601f1061066557610100808354040283529160200191610690565b60035433600160a060020a03908116911614610dfc57600080fd5b600160a060020a03166000908152600a60205260409020805460ff19166001179055565b6000610e2c3383610b39565b1515610e3757600080fd5b6106b5838361118a565b600d5474010000000000000000000000000000000000000000900460ff1681565b600d54600160a060020a031681565b600f6020526000908152604090205481565b60095460ff1681565b600c54600160a060020a031615801590610eb45750600c5433600160a060020a039081169116145b1515610ebf57600080fd5b600e544211610ecd57600080fd5b600b54610ee0908263ffffffff6110f216565b600b557f7174e2dc81bf5de8f9bf1dd00b511763f2ffb109c06de0f447be45348cc75af58160405190815260200160405180910390a150565b600b5481565b600042600e5411151515610f3257600080fd5b6106b583836111a7565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b60035433600160a060020a03908116911614610f8257600080fd5b600160a060020a0381161515610f9757600080fd5b600354600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600a6020526000908152604090205460ff1681565b60035433600160a060020a0390811691161461103257600080fd5b600160a060020a038116151561104757600080fd5b600c805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03838116919091179182905516633197cbb66000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156110b257600080fd5b6102c65a03f115156110c357600080fd5b5050506040518051600e555050565b60095460009060ff16156110e8575060006106b8565b6106b583836111c7565b6000828211156110fe57fe5b50900390565b60095460009060ff161561111a57506000610883565b610880848484611233565b60008282018381101561113457fe5b8091505b5092915050565b6000808315156111525760009150611138565b5082820282848281151561116257fe5b041461113457fe5b60095460009060ff1615611180575060006106b8565b6106b583836113a1565b60095460009060ff161561119d57600080fd5b6106b5838361149b565b60095460009060ff16156111bd575060006106b8565b6106b5838361159b565b600160a060020a03338116600081815260026020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b6000600160a060020a038316151561124a57600080fd5b600160a060020a03841660009081526020819052604090205482111561126f57600080fd5b600160a060020a03808516600090815260026020908152604080832033909416835292905220548211156112a257600080fd5b600160a060020a0384166000908152602081905260409020546112cb908363ffffffff6110f216565b600160a060020a038086166000908152602081905260408082209390935590851681522054611300908363ffffffff61112516565b600160a060020a0380851660009081526020818152604080832094909455878316825260028152838220339093168252919091522054611346908363ffffffff6110f216565b600160a060020a03808616600081815260026020908152604080832033861684529091529081902093909355908516916000805160206116408339815191529085905190815260200160405180910390a35060019392505050565b600160a060020a033381166000908152600260209081526040808320938616835292905290812054808311156113fe57600160a060020a033381166000908152600260209081526040808320938816835292905290812055611435565b61140e818463ffffffff6110f216565b600160a060020a033381166000908152600260209081526040808320938916835292905220555b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020547f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925915190815260200160405180910390a35060019392505050565b6000600160a060020a03831615156114b257600080fd5b600160a060020a0333166000908152602081905260409020548211156114d757600080fd5b600160a060020a033316600090815260208190526040902054611500908363ffffffff6110f216565b600160a060020a033381166000908152602081905260408082209390935590851681522054611535908363ffffffff61112516565b60008085600160a060020a0316600160a060020a031681526020019081526020016000208190555082600160a060020a031633600160a060020a03166000805160206116408339815191528460405190815260200160405180910390a350600192915050565b600160a060020a0333811660009081526002602090815260408083209386168352929052908120546115d3908363ffffffff61112516565b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020849055919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591905190815260200160405180910390a3506001929150505600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820952cb2b31753a4a8295f98061add2ace92fba423d54132081121701fca0dfcb60029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _locked (bool): False
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000
Swarm Source
bzzr://952cb2b31753a4a8295f98061add2ace92fba423d54132081121701fca0dfcb6
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.