More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 44 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 13793238 | 1067 days ago | IN | 0.45735523 ETH | 0.00153484 | ||||
Transfer | 13793203 | 1067 days ago | IN | 0.45782029 ETH | 0.00129387 | ||||
Finalize | 5587979 | 2380 days ago | IN | 0 ETH | 0.00024996 | ||||
Grant Tokens | 5587975 | 2380 days ago | IN | 0 ETH | 0.0020551 | ||||
Transfer | 5585149 | 2380 days ago | IN | 0.013 ETH | 0.00036248 | ||||
Transfer | 5571447 | 2382 days ago | IN | 0.1 ETH | 0.00371546 | ||||
Transfer | 5565119 | 2384 days ago | IN | 0.06 ETH | 0.00271863 | ||||
Set Tier1Partici... | 5561563 | 2384 days ago | IN | 0 ETH | 0.00017959 | ||||
Transfer | 5502074 | 2395 days ago | IN | 0.2 ETH | 0.00371546 | ||||
Transfer | 5499537 | 2395 days ago | IN | 0.02 ETH | 0.00009062 | ||||
Set Tier1Partici... | 5451068 | 2403 days ago | IN | 0 ETH | 0.00003657 | ||||
Set Tier1Partici... | 5451063 | 2403 days ago | IN | 0 ETH | 0.00003657 | ||||
Set Tier1Partici... | 5451059 | 2403 days ago | IN | 0 ETH | 0.00006657 | ||||
Transfer | 5446282 | 2404 days ago | IN | 0.05 ETH | 0.00271863 | ||||
Transfer | 5446254 | 2404 days ago | IN | 0.06 ETH | 0.0018699 | ||||
Transfer | 5423465 | 2408 days ago | IN | 0.2 ETH | 0.00190304 | ||||
Transfer | 5416411 | 2409 days ago | IN | 1 ETH | 0.00271863 | ||||
Transfer | 5414993 | 2409 days ago | IN | 1 ETH | 0.00371546 | ||||
Set Tier1Partici... | 5413822 | 2410 days ago | IN | 0 ETH | 0.00004489 | ||||
Set Tier1Partici... | 5413363 | 2410 days ago | IN | 0 ETH | 0.00013315 | ||||
Set Tier1Partici... | 5413271 | 2410 days ago | IN | 0 ETH | 0.00008979 | ||||
Transfer | 5413248 | 2410 days ago | IN | 2 ETH | 0.00018124 | ||||
Transfer | 5413188 | 2410 days ago | IN | 2 ETH | 0.00059118 | ||||
Transfer | 5412816 | 2410 days ago | IN | 0.022 ETH | 0.00009062 | ||||
Transfer | 5412814 | 2410 days ago | IN | 0.10390937 ETH | 0.00009062 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
5585149 | 2380 days ago | 0.013 ETH | ||||
5571447 | 2382 days ago | 0.1 ETH | ||||
5565119 | 2384 days ago | 0.06 ETH | ||||
5502074 | 2395 days ago | 0.2 ETH | ||||
5499537 | 2395 days ago | 0.02 ETH | ||||
5446282 | 2404 days ago | 0.05 ETH | ||||
5446254 | 2404 days ago | 0.06 ETH | ||||
5423465 | 2408 days ago | 0.2 ETH | ||||
5416411 | 2409 days ago | 1 ETH | ||||
5414993 | 2409 days ago | 1 ETH | ||||
5413248 | 2410 days ago | 2 ETH | ||||
5412816 | 2410 days ago | 0.022 ETH | ||||
5412814 | 2410 days ago | 0.10390937 ETH | ||||
5412773 | 2410 days ago | 0.13490937 ETH | ||||
5412744 | 2410 days ago | 0.16390937 ETH | ||||
5412724 | 2410 days ago | 0.18790937 ETH | ||||
5412708 | 2410 days ago | 0.21390937 ETH | ||||
5412694 | 2410 days ago | 0.218 ETH | ||||
5412693 | 2410 days ago | 0.218 ETH | ||||
5412688 | 2410 days ago | 0.218 ETH | ||||
5412673 | 2410 days ago | 0.218 ETH | ||||
5412670 | 2410 days ago | 0.218 ETH | ||||
5412668 | 2410 days ago | 0.218 ETH | ||||
5412662 | 2410 days ago | 0.218 ETH | ||||
5412656 | 2410 days ago | 0.218 ETH |
Loading...
Loading
Contract Name:
BlokTokenSale
Compiler Version
v0.4.13+commit.fb4cb1a
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-04-07 */ pragma solidity ^0.4.13; contract ERC20 { uint256 public totalSupply; function balanceOf(address _owner) constant returns (uint256 balance); function transfer(address _to, uint256 _value) returns (bool success); function transferFrom(address _from, address _to, uint256 _value) returns (bool success); function approve(address _spender, uint256 _value) returns (bool success); function allowance(address _owner, address _spender) constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract BasicToken is ERC20 { using SafeMath for uint256; uint256 public totalSupply; mapping (address => mapping (address => uint256)) allowed; mapping (address => uint256) balances; event Approval(address indexed owner, address indexed spender, uint256 value); event Transfer(address indexed from, address indexed to, uint256 value); /// @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. /// @param _spender address The address which will spend the funds. /// @param _value uint256 The amount of tokens to be spent. function approve(address _spender, uint256 _value) public returns (bool) { // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) { revert(); } 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 uint256 specifying the amount of tokens still available for the spender. function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } /// @dev Gets the balance of the specified address. /// @param _owner address The address to query the the balance of. /// @return uint256 representing the amount owned by the passed address. function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } /// @dev transfer token to a specified address. /// @param _to address The address to transfer to. /// @param _value uint256 The amount to be transferred. function transfer(address _to, uint256 _value) public returns (bool) { balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } /// @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) { uint256 _allowance = allowed[_from][msg.sender]; balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = _allowance.sub(_value); Transfer(_from, _to, _value); return true; } } contract Ownable { address public owner; address public newOwnerCandidate; event OwnershipRequested(address indexed _by, address indexed _to); event OwnershipTransferred(address indexed _from, address indexed _to); /// @dev The Ownable constructor sets the original `owner` of the contract to the sender /// account. function Ownable() { owner = msg.sender; } /// @dev Reverts if called by any account other than the owner. modifier onlyOwner() { if (msg.sender != owner) { revert(); } _; } modifier onlyOwnerCandidate() { if (msg.sender != newOwnerCandidate) { revert(); } _; } /// @dev Proposes to transfer control of the contract to a newOwnerCandidate. /// @param _newOwnerCandidate address The address to transfer ownership to. function requestOwnershipTransfer(address _newOwnerCandidate) external onlyOwner { require(_newOwnerCandidate != address(0)); newOwnerCandidate = _newOwnerCandidate; OwnershipRequested(msg.sender, newOwnerCandidate); } /// @dev Accept ownership transfer. This method needs to be called by the previously proposed owner. function acceptOwnership() external onlyOwnerCandidate { address previousOwner = owner; owner = newOwnerCandidate; newOwnerCandidate = address(0); OwnershipTransferred(previousOwner, owner); } } library SafeMath { function mul(uint256 a, uint256 b) internal returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal 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; } function sub(uint256 a, uint256 b) internal returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } function max64(uint64 a, uint64 b) internal constant returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal constant returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal constant returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal constant returns (uint256) { return a < b ? a : b; } } contract TokenHolder is Ownable { /// @dev Allow the owner to transfer out any accidentally sent ERC20 tokens. /// @param _tokenAddress address The address of the ERC20 contract. /// @param _amount uint256 The amount of tokens to be transferred. function transferAnyERC20Token(address _tokenAddress, uint256 _amount) onlyOwner returns (bool success) { return ERC20(_tokenAddress).transfer(owner, _amount); } } contract BlokToken is Ownable, BasicToken, TokenHolder { using SafeMath for uint256; string public constant name = "Blok"; string public constant symbol = "BLO"; // Using same decimal value as ETH (makes ETH-BLO conversion much easier). uint8 public constant decimals = 18; // States whether creating more tokens is allowed or not. // Used during token sale. bool public isMinting = true; event MintingEnded(); modifier onlyDuringMinting() { require(isMinting); _; } modifier onlyAfterMinting() { require(!isMinting); _; } /// @dev Mint Blok tokens. /// @param _to address Address to send minted Blok to. /// @param _amount uint256 Amount of Blok tokens to mint. function mint(address _to, uint256 _amount) external onlyOwner onlyDuringMinting { totalSupply = totalSupply.add(_amount); balances[_to] = balances[_to].add(_amount); Transfer(0x0, _to, _amount); } /// @dev End minting mode. function endMinting() external onlyOwner { if (isMinting == false) { return; } isMinting = false; MintingEnded(); } /// @dev Same ERC20 behavior, but reverts if still minting. /// @param _spender address The address which will spend the funds. /// @param _value uint256 The amount of tokens to be spent. function approve(address _spender, uint256 _value) public onlyAfterMinting returns (bool) { return super.approve(_spender, _value); } /// @dev Same ERC20 behavior, but reverts if still minting. /// @param _to address The address to transfer to. /// @param _value uint256 The amount to be transferred. function transfer(address _to, uint256 _value) public onlyAfterMinting returns (bool) { return super.transfer(_to, _value); } /// @dev Same ERC20 behavior, but reverts if still minting. /// @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 onlyAfterMinting returns (bool) { return super.transferFrom(_from, _to, _value); } } contract BlokTokenSale is Ownable, TokenHolder { using SafeMath for uint256; // External parties: // BLO token contract. BlokToken public blok; // Vesting contract for pre-sale participants. VestingTrustee public trustee; // Received funds are forwarded to this address. address public fundingRecipient; // Blok token unit. // Using same decimal value as ETH (makes ETH-BLO conversion much easier). // This is the same as in Blok token contract. uint256 public constant TOKEN_UNIT = 10 ** 18; // Maximum number of tokens in circulation: 10 trillion. uint256 public constant MAX_TOKENS = 360000000 * TOKEN_UNIT; // Maximum tokens offered in the sale. uint256 public constant MAX_TOKENS_SOLD = 234000000 * TOKEN_UNIT; // BLO to 1 wei ratio. uint256 public constant BLO_PER_WEI = 5700; // Sale start and end timestamps. uint256 public constant SALE_DURATION = 30 days; uint256 public startTime; uint256 public endTime; // Amount of tokens sold until now in the sale. uint256 public tokensSold = 0; // Participation caps, according to KYC tiers. uint256 public constant TIER_1_CAP = 20000 ether; // Maximum uint256 value // Accumulated amount each participant has contributed so far. mapping (address => uint256) public participationHistory; // Maximum amount that each participant is allowed to contribute (in WEI). mapping (address => uint256) public participationCaps; // Maximum amount ANYBODY is currently allowed to contribute. uint256 public hardParticipationCap = uint256(-1); // Vesting information for special addresses: struct TokenGrant { uint256 value; uint256 startOffset; uint256 cliffOffset; uint256 endOffset; uint256 installmentLength; uint8 percentVested; } address[] public tokenGrantees; mapping (address => TokenGrant) public tokenGrants; uint256 public lastGrantedIndex = 0; uint256 public constant MAX_TOKEN_GRANTEES = 100; uint256 public constant GRANT_BATCH_SIZE = 10; address public constant RESERVE_TOKENS = 0xA67E1c56A5e0363B61a23670FFC0FcD8F09f178d; address public constant TEAM_WALLET = 0x52aA6A62404107742ac01Ff247ED47b49b16c40A; address public constant BOUNTY_WALLET = 0xCf1e64Ce2740A03192F1d7a3234AABd88c025c4B; event TokensIssued(address indexed _to, uint256 _tokens); /// @dev Reverts if called when not during sale. modifier onlyDuringSale() { require(!saleEnded() && now >= startTime); _; } /// @dev Reverts if called before sale ends. modifier onlyAfterSale() { require(saleEnded()); _; } /// @dev Constructor that initializes the sale conditions. /// @param _fundingRecipient address The address of the funding recipient. /// @param _startTime uint256 The start time of the token sale. function BlokTokenSale(address _fundingRecipient, uint256 _startTime) { require(_fundingRecipient != address(0)); require(_startTime > now); // Deploy new BlokToken contract. blok = new BlokToken(); // Deploy new VestingTrustee contract. trustee = new VestingTrustee(blok); fundingRecipient = _fundingRecipient; startTime = _startTime; endTime = startTime + SALE_DURATION; // Initialize special vesting grants. initTokenGrants(); } /// @dev Initialize token grants. function initTokenGrants() private onlyOwner { tokenGrantees.push(RESERVE_TOKENS); tokenGrants[RESERVE_TOKENS] = TokenGrant(MAX_TOKENS.mul(18).div(100), 0, 0, 10 days, 1 days, 0); tokenGrantees.push(TEAM_WALLET); tokenGrants[TEAM_WALLET] = TokenGrant(MAX_TOKENS.mul(13).div(100), 0, 0, 10 days, 1 days, 0); tokenGrantees.push(BOUNTY_WALLET); tokenGrants[BOUNTY_WALLET] = TokenGrant(MAX_TOKENS.mul(4).div(100), 0, 0, 10 days, 1 days, 0); } /// @dev Adds a Blok token vesting grant. /// @param _grantee address The address of the token grantee. Can be granted only once. /// @param _value uint256 The value of the grant. function addTokenGrant(address _grantee, uint256 _value) external onlyOwner { require(_grantee != address(0)); require(_value > 0); require(tokenGrantees.length + 1 <= MAX_TOKEN_GRANTEES); // Verify the grant doesn't already exist. require(tokenGrants[_grantee].value == 0); for (uint i = 0; i < tokenGrantees.length; i++) { require(tokenGrantees[i] != _grantee); } // Add grant and add to grantee list. tokenGrantees.push(_grantee); tokenGrants[_grantee] = TokenGrant(_value, 0, 1 years, 1 years, 1 days, 50); } /// @dev Deletes a Blok token grant. /// @param _grantee address The address of the token grantee. function deleteTokenGrant(address _grantee) external onlyOwner { require(_grantee != address(0)); // Delete the grant from the keys array. for (uint i = 0; i < tokenGrantees.length; i++) { if (tokenGrantees[i] == _grantee) { delete tokenGrantees[i]; break; } } // Delete the grant from the mapping. delete tokenGrants[_grantee]; } /// @dev Add a list of participants to a capped participation tier. /// @param _participants address[] The list of participant addresses. /// @param _cap uint256 The cap amount (in ETH). function setParticipationCap(address[] _participants, uint256 _cap) private onlyOwner { for (uint i = 0; i < _participants.length; i++) { participationCaps[_participants[i]] = _cap; } } /// @dev Add a list of participants to cap tier #1. /// @param _participants address[] The list of participant addresses. function setTier1Participants(address[] _participants) external onlyOwner { setParticipationCap(_participants, TIER_1_CAP); } /// @dev Set hard participation cap for all participants. /// @param _cap uint256 The hard cap amount. function setHardParticipationCap(uint256 _cap) external onlyOwner { require(_cap > 0); hardParticipationCap = _cap; } /// @dev Fallback function that will delegate the request to create(). function () external payable onlyDuringSale { create(msg.sender); } /// @dev Create and sell tokens to the caller. /// @param _recipient address The address of the recipient receiving the tokens. function create(address _recipient) public payable onlyDuringSale { require(_recipient != address(0)); // Enforce participation cap (in Wei received). uint256 weiAlreadyParticipated = participationHistory[msg.sender]; uint256 participationCap = SafeMath.min256(TOKEN_UNIT.mul(15).add(participationCaps[msg.sender]), hardParticipationCap); uint256 cappedWeiReceived = SafeMath.min256(msg.value, participationCap.sub(weiAlreadyParticipated)); require(cappedWeiReceived > 0); // Accept funds and transfer to funding recipient. uint256 weiLeftInSale = MAX_TOKENS_SOLD.sub(tokensSold).div(BLO_PER_WEI); uint256 weiToParticipate = SafeMath.min256(cappedWeiReceived, weiLeftInSale); participationHistory[msg.sender] = weiAlreadyParticipated.add(weiToParticipate); fundingRecipient.transfer(weiToParticipate); // Issue tokens and transfer to recipient. uint256 tokensLeftInSale = MAX_TOKENS_SOLD.sub(tokensSold); uint256 tokensToIssue = weiToParticipate.mul(BLO_PER_WEI); if (tokensLeftInSale.sub(tokensToIssue) < BLO_PER_WEI) { // If purchase would cause less than BLO_PER_WEI tokens left then nobody could ever buy them. // So, gift them to the last buyer. tokensToIssue = tokensLeftInSale; } tokensSold = tokensSold.add(tokensToIssue); issueTokens(_recipient, tokensToIssue); // Partial refund if full participation not possible // e.g. due to cap being reached. uint256 refund = msg.value.sub(weiToParticipate); if (refund > 0) { msg.sender.transfer(refund); } } /// @dev Finalizes the token sale event, by stopping token minting. function finalize() external onlyAfterSale onlyOwner { if (!blok.isMinting()) { revert(); } require(lastGrantedIndex == tokenGrantees.length); // Finish minting. blok.endMinting(); } /// @dev Grants pre-configured token grants in batches. When the method is called, it'll resume from the last grant, /// from its previous run, and will finish either after granting GRANT_BATCH_SIZE grants or finishing the whole list /// of grants. function grantTokens() external onlyAfterSale onlyOwner { uint endIndex = SafeMath.min256(tokenGrantees.length, lastGrantedIndex + GRANT_BATCH_SIZE); for (uint i = lastGrantedIndex; i < endIndex; i++) { address grantee = tokenGrantees[i]; // Calculate how many tokens have been granted, vested, and issued such that: granted = vested + issued. TokenGrant memory tokenGrant = tokenGrants[grantee]; uint256 tokensGranted = tokenGrant.value; uint256 tokensVesting = tokensGranted.mul(tokenGrant.percentVested).div(100); uint256 tokensIssued = tokensGranted.sub(tokensVesting); // Transfer issued tokens that have yet to be transferred to grantee. if (tokensIssued > 0) { issueTokens(grantee, tokensIssued); } // Transfer vested tokens that have yet to be transferred to vesting trustee, and initialize grant. if (tokensVesting > 0) { issueTokens(trustee, tokensVesting); trustee.grant(grantee, tokensVesting, now.add(tokenGrant.startOffset), now.add(tokenGrant.cliffOffset), now.add(tokenGrant.endOffset), tokenGrant.installmentLength, true); } lastGrantedIndex++; } } /// @dev Issues tokens for the recipient. /// @param _recipient address The address of the recipient. /// @param _tokens uint256 The amount of tokens to issue. function issueTokens(address _recipient, uint256 _tokens) private { // Request Blok token contract to mint the requested tokens for the buyer. blok.mint(_recipient, _tokens); TokensIssued(_recipient, _tokens); } /// @dev Returns whether the sale has ended. /// @return bool Whether the sale has ended or not. function saleEnded() private constant returns (bool) { return tokensSold >= MAX_TOKENS_SOLD || now >= endTime; } /// @dev Requests to transfer control of the Blok token contract to a new owner. /// @param _newOwnerCandidate address The address to transfer ownership to. /// /// NOTE: /// 1. The new owner will need to call Blok token contract's acceptOwnership directly in order to accept the ownership. /// 2. Calling this method during the token sale will prevent the token sale to continue, since only the owner of /// the Blok token contract can issue new tokens. function requestBlokTokenOwnershipTransfer(address _newOwnerCandidate) external onlyOwner { blok.requestOwnershipTransfer(_newOwnerCandidate); } /// @dev Accepts new ownership on behalf of the Blok token contract. // This can be used by the sale contract itself to claim back ownership of the Blok token contract. function acceptBlokTokenOwnership() external onlyOwner { blok.acceptOwnership(); } /// @dev Requests to transfer control of the VestingTrustee contract to a new owner. /// @param _newOwnerCandidate address The address to transfer ownership to. /// /// NOTE: /// 1. The new owner will need to call VestingTrustee's acceptOwnership directly in order to accept the ownership. /// 2. Calling this method during the token sale will prevent the token sale from finalizaing, since only the owner /// of the VestingTrustee contract can issue new token grants. function requestVestingTrusteeOwnershipTransfer(address _newOwnerCandidate) external onlyOwner { trustee.requestOwnershipTransfer(_newOwnerCandidate); } /// @dev Accepts new ownership on behalf of the VestingTrustee contract. /// This can be used by the token sale contract itself to claim back ownership of the VestingTrustee contract. function acceptVestingTrusteeOwnership() external onlyOwner { trustee.acceptOwnership(); } } contract VestingTrustee is Ownable { using SafeMath for uint256; // Blok token contract. BlokToken public blok; // Vesting grant for a speicifc holder. struct Grant { uint256 value; uint256 start; uint256 cliff; uint256 end; uint256 installmentLength; // In seconds. uint256 transferred; bool revokable; } // Holder to grant information mapping. mapping (address => Grant) public grants; // Total tokens available for vesting. uint256 public totalVesting; event NewGrant(address indexed _from, address indexed _to, uint256 _value); event TokensUnlocked(address indexed _to, uint256 _value); event GrantRevoked(address indexed _holder, uint256 _refund); /// @dev Constructor that initializes the address of the Blok token contract. /// @param _blok BlokToken The address of the previously deployed Blok token contract. function VestingTrustee(BlokToken _blok) { require(_blok != address(0)); blok = _blok; } /// @dev Grant tokens to a specified address. /// @param _to address The holder address. /// @param _value uint256 The amount of tokens to be granted. /// @param _start uint256 The beginning of the vesting period. /// @param _cliff uint256 Duration of the cliff period (when the first installment is made). /// @param _end uint256 The end of the vesting period. /// @param _installmentLength uint256 The length of each vesting installment (in seconds). /// @param _revokable bool Whether the grant is revokable or not. function grant(address _to, uint256 _value, uint256 _start, uint256 _cliff, uint256 _end, uint256 _installmentLength, bool _revokable) external onlyOwner { require(_to != address(0)); require(_to != address(this)); // Don't allow holder to be this contract. require(_value > 0); // Require that every holder can be granted tokens only once. require(grants[_to].value == 0); // Require for time ranges to be consistent and valid. require(_start <= _cliff && _cliff <= _end); // Require installment length to be valid and no longer than (end - start). require(_installmentLength > 0 && _installmentLength <= _end.sub(_start)); // Grant must not exceed the total amount of tokens currently available for vesting. require(totalVesting.add(_value) <= blok.balanceOf(address(this))); // Assign a new grant. grants[_to] = Grant({ value: _value, start: _start, cliff: _cliff, end: _end, installmentLength: _installmentLength, transferred: 0, revokable: _revokable }); // Since tokens have been granted, reduce the total amount available for vesting. totalVesting = totalVesting.add(_value); NewGrant(msg.sender, _to, _value); } /// @dev Revoke the grant of tokens of a specifed address. /// @param _holder The address which will have its tokens revoked. function revoke(address _holder) public onlyOwner { Grant memory grant = grants[_holder]; // Grant must be revokable. require(grant.revokable); // Calculate amount of remaining tokens that are still available to be // returned to owner. uint256 refund = grant.value.sub(grant.transferred); // Remove grant information. delete grants[_holder]; // Update total vesting amount and transfer previously calculated tokens to owner. totalVesting = totalVesting.sub(refund); blok.transfer(msg.sender, refund); GrantRevoked(_holder, refund); } /// @dev Calculate the total amount of vested tokens of a holder at a given time. /// @param _holder address The address of the holder. /// @param _time uint256 The specific time to calculate against. /// @return a uint256 Representing a holder's total amount of vested tokens. function vestedTokens(address _holder, uint256 _time) external constant returns (uint256) { Grant memory grant = grants[_holder]; if (grant.value == 0) { return 0; } return calculateVestedTokens(grant, _time); } /// @dev Calculate amount of vested tokens at a specifc time. /// @param _grant Grant The vesting grant. /// @param _time uint256 The time to be checked /// @return a uint256 Representing the amount of vested tokens of a specific grant. function calculateVestedTokens(Grant _grant, uint256 _time) private constant returns (uint256) { // If we're before the cliff, then nothing is vested. if (_time < _grant.cliff) { return 0; } // If we're after the end of the vesting period - everything is vested; if (_time >= _grant.end) { return _grant.value; } // Calculate amount of installments past until now. // // NOTE result gets floored because of integer division. uint256 installmentsPast = _time.sub(_grant.start).div(_grant.installmentLength); // Calculate amount of days in entire vesting period. uint256 vestingDays = _grant.end.sub(_grant.start); // Calculate and return installments that have passed according to vesting days that have passed. return _grant.value.mul(installmentsPast.mul(_grant.installmentLength)).div(vestingDays); } /// @dev Unlock vested tokens and transfer them to their holder. /// @return a uint256 Representing the amount of vested tokens transferred to their holder. function unlockVestedTokens() external { Grant storage grant = grants[msg.sender]; // Require that there will be funds left in grant to tranfser to holder. require(grant.value != 0); // Get the total amount of vested tokens, acccording to grant. uint256 vested = calculateVestedTokens(grant, now); if (vested == 0) { return; } // Make sure the holder doesn't transfer more than what he already has. uint256 transferable = vested.sub(grant.transferred); if (transferable == 0) { return; } // Update transferred and total vesting amount, then transfer remaining vested funds to holder. grant.transferred = grant.transferred.add(transferable); totalVesting = totalVesting.sub(transferable); blok.transfer(msg.sender, transferable); TokensUnlocked(msg.sender, transferable); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"lastGrantedIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_newOwnerCandidate","type":"address"}],"name":"requestOwnershipTransfer","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"MAX_TOKENS_SOLD","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"fundingRecipient","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_newOwnerCandidate","type":"address"}],"name":"requestBlokTokenOwnershipTransfer","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"TEAM_WALLET","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"blok","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"endTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"grantTokens","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_grantee","type":"address"}],"name":"deleteTokenGrant","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"participationHistory","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"finalize","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"tokensSold","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_cap","type":"uint256"}],"name":"setHardParticipationCap","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"hardParticipationCap","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"SALE_DURATION","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"participationCaps","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"startTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"TIER_1_CAP","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"MAX_TOKEN_GRANTEES","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"acceptBlokTokenOwnership","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_recipient","type":"address"}],"name":"create","outputs":[],"payable":true,"type":"function"},{"constant":false,"inputs":[{"name":"_participants","type":"address[]"}],"name":"setTier1Participants","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_UNIT","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"BLO_PER_WEI","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"tokenGrants","outputs":[{"name":"value","type":"uint256"},{"name":"startOffset","type":"uint256"},{"name":"cliffOffset","type":"uint256"},{"name":"endOffset","type":"uint256"},{"name":"installmentLength","type":"uint256"},{"name":"percentVested","type":"uint8"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_grantee","type":"address"},{"name":"_value","type":"uint256"}],"name":"addTokenGrant","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_newOwnerCandidate","type":"address"}],"name":"requestVestingTrusteeOwnershipTransfer","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"RESERVE_TOKENS","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"acceptVestingTrusteeOwnership","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"newOwnerCandidate","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"tokenGrantees","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_tokenAddress","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transferAnyERC20Token","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"BOUNTY_WALLET","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"MAX_TOKENS","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"GRANT_BATCH_SIZE","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"trustee","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"inputs":[{"name":"_fundingRecipient","type":"address"},{"name":"_startTime","type":"uint256"}],"payable":false,"type":"constructor"},{"payable":true,"type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_tokens","type":"uint256"}],"name":"TokensIssued","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_by","type":"address"},{"indexed":true,"name":"_to","type":"address"}],"name":"OwnershipRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"}],"name":"OwnershipTransferred","type":"event"}]
Contract Creation Code
60606040526000600755600019600a556000600d5534156200002057600080fd5b60405160408062003b5483398101604052808051919060200180519150505b5b60008054600160a060020a03191633600160a060020a03161790555b600160a060020a03821615156200007257600080fd5b4281116200007f57600080fd5b62000089620005b9565b604051809103906000f0801515620000a057600080fd5b60028054600160a060020a031916600160a060020a03928316179081905516620000c9620005ca565b600160a060020a039091168152602001604051809103906000f0801515620000f057600080fd5b60038054600160a060020a0319908116600160a060020a039384161790915560048054909116918416919091179055600581905562278d008101600655620001456401000000006200014e8102620018581704565b5b50506200062c565b60005433600160a060020a039081169116146200016a57600080fd5b600b8054600181016200017e8382620005db565b916000526020600020900160005b8154600160a060020a036101009290920a918202191673a67e1c56a5e0363b61a23670ffc0fcd8f09f178d9091021790555060c0604051908101604052806200020c6064620001f76b0129c8f71ad02e2a680000006012640100000000620016236200056a82021704565b906401000000006200169d6200059c82021704565b81526000602080830182905260408301829052620d2f00606084015262015180608084015260a090920181905273a67e1c56a5e0363b61a23670ffc0fcd8f09f178d9052600c90527fcd72efd5a552ae8b00e80f47cc5c15519eb33b2275d1356fad767525313d6cfc815181556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151600591909101805460ff191660ff90921691909117905550600b805460018101620002d28382620005db565b916000526020600020900160005b8154600160a060020a036101009290920a91820219167352aa6a62404107742ac01ff247ed47b49b16c40a9091021790555060c060405190810160405280620003606064620001f76b0129c8f71ad02e2a68000000600d640100000000620016236200056a82021704565b906401000000006200169d6200059c82021704565b81526000602080830182905260408301829052620d2f00606084015262015180608084015260a09092018190527352aa6a62404107742ac01ff247ed47b49b16c40a9052600c90527f5f419449e46e991718ec28a3ebc27fdb5d7a78821599a3815e22121d1f646f64815181556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151600591909101805460ff191660ff90921691909117905550600b805460018101620004268382620005db565b916000526020600020900160005b8154600160a060020a036101009290920a918202191673cf1e64ce2740a03192f1d7a3234aabd88c025c4b9091021790555060c060405190810160405280620004b46064620001f76b0129c8f71ad02e2a680000006004640100000000620016236200056a82021704565b906401000000006200169d6200059c82021704565b81526000602080830182905260408301829052620d2f00606084015262015180608084015260a090920181905273cf1e64ce2740a03192f1d7a3234aabd88c025c4b9052600c90527fa4dae35cfd6005e9263f99ea9d6b696013c9155b5f35b1c48c1a1773c4aa9ae5815181556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151600591909101805460ff191660ff909216919091179055505b5b565b60008282028315806200058857508284828115156200058557fe5b04145b15156200059157fe5b8091505b5092915050565b6000808284811515620005ab57fe5b0490508091505b5092915050565b604051610c16806200229983390190565b604051610ca58062002eaf83390190565b81548183558181151162000602576000838152602090206200060291810190830162000608565b5b505050565b6200062991905b808211156200062557600081556001016200060f565b5090565b90565b611c5d806200063c6000396000f300606060405236156101c75763ffffffff60e060020a6000350416630423974381146101fc5780630952c5041461022157806317f5de95146102425780631bb534ba1461026757806329dd0d7d146102965780632b905bf6146102b75780633097f94c146102e65780633197cbb61461031557806334fa37da1461033a5780633b8253021461034f57806349432923146103705780634bb278f3146103a1578063518ab2a8146103b657806364329400146103db57806365b9e37d146103f35780636d79207c1461041857806376e532211461043d57806378e979251461046e57806379ba509714610493578063830ced52146104a85780638da5cb5b146104cd57806391f5f3c9146104fc578063999377ec146105215780639ed9331814610536578063a3ea478f1461054c578063a5c9cd821461056c578063ad631abe14610591578063b81a4d8f146105b6578063b8ad2abe14610610578063c28f9df114610634578063c35d1e0114610655578063cfabe67b14610684578063d091b55014610699578063dbeea819146106c8578063dc39d06d146106fa578063dc6055dd14610730578063f47c84c51461075f578063fa73af0b14610784578063fdf97cb2146107a9575b6101fa5b6101d36107d8565b1580156101e257506005544210155b15156101ed57600080fd5b6101f633610801565b5b5b565b005b341561020757600080fd5b61020f610a33565b60405190815260200160405180910390f35b341561022c57600080fd5b6101fa600160a060020a0360043516610a39565b005b341561024d57600080fd5b61020f610ace565b60405190815260200160405180910390f35b341561027257600080fd5b61027a610add565b604051600160a060020a03909116815260200160405180910390f35b34156102a157600080fd5b6101fa600160a060020a0360043516610aec565b005b34156102c257600080fd5b61027a610b70565b604051600160a060020a03909116815260200160405180910390f35b34156102f157600080fd5b61027a610b88565b604051600160a060020a03909116815260200160405180910390f35b341561032057600080fd5b61020f610b97565b60405190815260200160405180910390f35b341561034557600080fd5b6101fa610b9d565b005b341561035a57600080fd5b6101fa600160a060020a0360043516610df4565b005b341561037b57600080fd5b61020f600160a060020a0360043516610f02565b60405190815260200160405180910390f35b34156103ac57600080fd5b6101fa610f14565b005b34156103c157600080fd5b61020f611018565b60405190815260200160405180910390f35b34156103e657600080fd5b6101fa60043561101e565b005b34156103fe57600080fd5b61020f611050565b60405190815260200160405180910390f35b341561042357600080fd5b61020f611056565b60405190815260200160405180910390f35b341561044857600080fd5b61020f600160a060020a036004351661105d565b60405190815260200160405180910390f35b341561047957600080fd5b61020f61106f565b60405190815260200160405180910390f35b341561049e57600080fd5b6101fa611075565b005b34156104b357600080fd5b61020f611104565b60405190815260200160405180910390f35b34156104d857600080fd5b61027a611112565b604051600160a060020a03909116815260200160405180910390f35b341561050757600080fd5b61020f611121565b60405190815260200160405180910390f35b341561052c57600080fd5b6101fa611126565b005b6101fa600160a060020a0360043516610801565b005b341561055757600080fd5b6101fa6004803560248101910135611198565b005b341561057757600080fd5b61020f6111fb565b60405190815260200160405180910390f35b341561059c57600080fd5b61020f611207565b60405190815260200160405180910390f35b34156105c157600080fd5b6105d5600160a060020a036004351661120d565b60405195865260208601949094526040808601939093526060850191909152608084015260ff90911660a083015260c0909101905180910390f35b341561061b57600080fd5b6101fa600160a060020a0360043516602435611245565b005b341561063f57600080fd5b6101fa600160a060020a03600435166113f2565b005b341561066057600080fd5b61027a611476565b604051600160a060020a03909116815260200160405180910390f35b341561068f57600080fd5b6101fa61148e565b005b34156106a457600080fd5b61027a611500565b604051600160a060020a03909116815260200160405180910390f35b34156106d357600080fd5b61027a60043561150f565b604051600160a060020a03909116815260200160405180910390f35b341561070557600080fd5b61071c600160a060020a0360043516602435611541565b604051901515815260200160405180910390f35b341561073b57600080fd5b61027a6115e7565b604051600160a060020a03909116815260200160405180910390f35b341561076a57600080fd5b61020f6115ff565b60405190815260200160405180910390f35b341561078f57600080fd5b61020f61160f565b60405190815260200160405180910390f35b34156107b457600080fd5b61027a611614565b604051600160a060020a03909116815260200160405180910390f35b6000670de0b6b3a7640000630df28e80026007541015806107fb57506006544210155b90505b90565b6000806000806000806000806108156107d8565b15801561082457506005544210155b151561082f57600080fd5b600160a060020a038916151561084457600080fd5b600160a060020a0333166000908152600860209081526040808320546009909252909120549098506108a1906108999061088d670de0b6b3a7640000600f63ffffffff61162316565b9063ffffffff61165216565b600a5461166c565b96506108bc346108b7898b63ffffffff61168616565b61166c565b9550600086116108cb57600080fd5b6007546108fe90611644906108f2906ac18f6d6b0751352a0000009063ffffffff61168616565b9063ffffffff61169d16565b945061090a868661166c565b935061091c888563ffffffff61165216565b600160a060020a033381166000908152600860205260409081902092909255600454169085156108fc0290869051600060405180830381858888f19350505050151561096757600080fd5b600754610986906ac18f6d6b0751352a0000009063ffffffff61168616565b925061099a8461164463ffffffff61162316565b91506116446109af848463ffffffff61168616565b10156109b9578291505b6007546109cc908363ffffffff61165216565b6007556109d989836116b9565b6109e9348563ffffffff61168616565b90506000811115610a2557600160a060020a03331681156108fc0282604051600060405180830381858888f193505050501515610a2557600080fd5b5b5b5b505050505050505050565b600d5481565b60005433600160a060020a03908116911614610a5457600080fd5b600160a060020a0381161515610a6957600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383811691909117918290559081169033167f13a4b3bc0d5234dd3d87c9f1557d8faefa37986da62c36ba49309e2fb2c9aec460405160405180910390a35b5b50565b6ac18f6d6b0751352a00000081565b600454600160a060020a031681565b60005433600160a060020a03908116911614610b0757600080fd5b600254600160a060020a0316630952c5048260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515610b5757600080fd5b6102c65a03f11515610b6857600080fd5b5050505b5b50565b7352aa6a62404107742ac01ff247ed47b49b16c40a81565b600254600160a060020a031681565b60065481565b6000806000610baa6117d3565b6000806000610bb76107d8565b1515610bc257600080fd5b60005433600160a060020a03908116911614610bdd57600080fd5b600b54600d54610bf09190600a0161166c565b9650600d5495505b86861015610de857600b805487908110610c0e57fe5b906000526020600020900160005b9054600160a060020a036101009290920a9004166000818152600c60205260409081902091965060c0905190810160409081528254825260018301546020830152600283015490820152600382015460608201526004820154608082015260059091015460ff1660a0820152935083519250610cb760646108f28660a00151869060ff1663ffffffff61162316565b9063ffffffff61169d16565b9150610cc9838363ffffffff61168616565b90506000811115610cde57610cde85826116b9565b5b6000821115610dd357600354610cfe90600160a060020a0316836116b9565b600354600160a060020a031663957924308684610d266020890151429063ffffffff61165216565b610d3b8960400151429063ffffffff61165216565b610d508a60600151429063ffffffff61165216565b8a60800151600160405160e060020a63ffffffff8a16028152600160a060020a039097166004880152602487019590955260448601939093526064850191909152608484015260a4830152151560c482015260e401600060405180830381600087803b1515610dbe57600080fd5b6102c65a03f11515610dcf57600080fd5b5050505b600d805460010190555b600190950194610bf8565b5b5b5b50505050505050565b6000805433600160a060020a03908116911614610e1057600080fd5b600160a060020a0382161515610e2557600080fd5b5060005b600b54811015610eb95781600160a060020a0316600b82815481101515610e4c57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a03161415610eb057600b805482908110610e8957fe5b906000526020600020900160005b6101000a815490600160a060020a030219169055610eb9565b5b600101610e29565b600160a060020a0382166000908152600c602052604081208181556001810182905560028101829055600381018290556004810191909155600501805460ff191690555b5b5050565b60086020526000908152604090205481565b610f1c6107d8565b1515610f2757600080fd5b60005433600160a060020a03908116911614610f4257600080fd5b600254600160a060020a0316632a8092df6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610f8a57600080fd5b6102c65a03f11515610f9b57600080fd5b505050604051805190501515610fb057600080fd5b600b54600d5414610fc057600080fd5b600254600160a060020a031663ef70aebf6040518163ffffffff1660e060020a028152600401600060405180830381600087803b1515610fff57600080fd5b6102c65a03f1151561101057600080fd5b5050505b5b5b565b60075481565b60005433600160a060020a0390811691161461103957600080fd5b6000811161104657600080fd5b600a8190555b5b50565b600a5481565b62278d0081565b60096020526000908152604090205481565b60055481565b60015460009033600160a060020a0390811691161461109357600080fd5b50600080546001805473ffffffffffffffffffffffffffffffffffffffff19808416600160a060020a03838116919091179586905591169091559081169116817f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35b5b50565b69043c33c193756480000081565b600054600160a060020a031681565b606481565b60005433600160a060020a0390811691161461114157600080fd5b600254600160a060020a03166379ba50976040518163ffffffff1660e060020a028152600401600060405180830381600087803b1515610fff57600080fd5b6102c65a03f1151561101057600080fd5b5050505b5b565b60005433600160a060020a039081169116146111b357600080fd5b610efd8282808060200260200160405190810160405280939291908181526020018383602002808284375069043c33c193756480000094506117659350505050565b5b5b5050565b670de0b6b3a764000081565b61164481565b600c60205260009081526040902080546001820154600283015460038401546004850154600590950154939492939192909160ff1686565b6000805433600160a060020a0390811691161461126157600080fd5b600160a060020a038316151561127657600080fd5b6000821161128357600080fd5b600b5460646001909101111561129857600080fd5b600160a060020a0383166000908152600c6020526040902054156112bb57600080fd5b5060005b600b548110156113185782600160a060020a0316600b828154811015156112e257fe5b906000526020600020900160005b9054600160a060020a036101009290920a900416141561130f57600080fd5b5b6001016112bf565b600b80546001810161132a838261180d565b916000526020600020900160005b8154600160a060020a038088166101009390930a928302920219161790555060c06040519081016040908152838252600060208084018290526301e133808385018190526060850152620151806080850152603260a0850152600160a060020a0387168252600c905220815181556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151600591909101805460ff191660ff909216919091179055505b5b505050565b60005433600160a060020a0390811691161461140d57600080fd5b600354600160a060020a0316630952c5048260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515610b5757600080fd5b6102c65a03f11515610b6857600080fd5b5050505b5b50565b73a67e1c56a5e0363b61a23670ffc0fcd8f09f178d81565b60005433600160a060020a039081169116146114a957600080fd5b600354600160a060020a03166379ba50976040518163ffffffff1660e060020a028152600401600060405180830381600087803b1515610fff57600080fd5b6102c65a03f1151561101057600080fd5b5050505b5b565b600154600160a060020a031681565b600b80548290811061151d57fe5b906000526020600020900160005b915054906101000a9004600160a060020a031681565b6000805433600160a060020a0390811691161461155d57600080fd5b60008054600160a060020a038086169263a9059cbb929091169085906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156115c357600080fd5b6102c65a03f115156115d457600080fd5b50505060405180519150505b5b92915050565b73cf1e64ce2740a03192f1d7a3234aabd88c025c4b81565b6b0129c8f71ad02e2a6800000081565b600a81565b600354600160a060020a031681565b600082820283158061163f575082848281151561163c57fe5b04145b151561164757fe5b8091505b5092915050565b60008282018381101561164757fe5b8091505b5092915050565b600081831061167b578161167d565b825b90505b92915050565b60008282111561169257fe5b508082035b92915050565b60008082848115156116ab57fe5b0490508091505b5092915050565b600254600160a060020a03166340c10f19838360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151561170f57600080fd5b6102c65a03f1151561172057600080fd5b50505081600160a060020a03167f21d739f160a7464fddaac4a1d1517d84e76b75618a053943b345c408c4160fe08260405190815260200160405180910390a25b5050565b6000805433600160a060020a0390811691161461178157600080fd5b5060005b825181101561101057816009600085848151811061179f57fe5b90602001906020020151600160a060020a031681526020810191909152604001600020555b600101611785565b5b5b505050565b60c0604051908101604052806000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b81548183558181151161101057600083815260209020611010918101908301611837565b5b505050565b6107fe91905b80821115611851576000815560010161183d565b5090565b90565b60005433600160a060020a0390811691161461187357600080fd5b600b805460018101611885838261180d565b916000526020600020900160005b8154600160a060020a036101009290920a918202191673a67e1c56a5e0363b61a23670ffc0fcd8f09f178d9091021790555060c0604051908101604052806118ff60646108f26b0129c8f71ad02e2a68000000601263ffffffff61162316565b9063ffffffff61169d16565b81526000602080830182905260408301829052620d2f00606084015262015180608084015260a090920181905273a67e1c56a5e0363b61a23670ffc0fcd8f09f178d9052600c90527fcd72efd5a552ae8b00e80f47cc5c15519eb33b2275d1356fad767525313d6cfc815181556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151600591909101805460ff191660ff90921691909117905550600b8054600181016119c3838261180d565b916000526020600020900160005b8154600160a060020a036101009290920a91820219167352aa6a62404107742ac01ff247ed47b49b16c40a9091021790555060c060405190810160405280611a3d60646108f26b0129c8f71ad02e2a68000000600d63ffffffff61162316565b9063ffffffff61169d16565b81526000602080830182905260408301829052620d2f00606084015262015180608084015260a09092018190527352aa6a62404107742ac01ff247ed47b49b16c40a9052600c90527f5f419449e46e991718ec28a3ebc27fdb5d7a78821599a3815e22121d1f646f64815181556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151600591909101805460ff191660ff90921691909117905550600b805460018101611b01838261180d565b916000526020600020900160005b8154600160a060020a036101009290920a918202191673cf1e64ce2740a03192f1d7a3234aabd88c025c4b9091021790555060c060405190810160405280611b7b60646108f26b0129c8f71ad02e2a68000000600463ffffffff61162316565b9063ffffffff61169d16565b81526000602080830182905260408301829052620d2f00606084015262015180608084015260a090920181905273cf1e64ce2740a03192f1d7a3234aabd88c025c4b9052600c90527fa4dae35cfd6005e9263f99ea9d6b696013c9155b5f35b1c48c1a1773c4aa9ae5815181556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151600591909101805460ff191660ff909216919091179055505b5b5600a165627a7a72305820d22c5d1194a73d933d9f314969e70bdc2e38344120ce41ab6b8a18878aa04133002960606040526006805460ff191660011790555b60018054600160a060020a03191633600160a060020a03161790555b5b610bd88061003e6000396000f300606060405236156100ee5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde0381146100f35780630952c5041461017e578063095ea7b31461019f57806318160ddd146101d557806323b872dd146101fa5780632a8092df14610236578063313ce5671461025d57806340c10f191461028657806370a08231146102aa57806379ba5097146102db5780638da5cb5b146102f057806395d89b411461031f578063a9059cbb146103aa578063d091b550146103e0578063dc39d06d1461040f578063dd62ed3e14610445578063ef70aebf1461047c575b600080fd5b34156100fe57600080fd5b610106610491565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101435780820151818401525b60200161012a565b50505050905090810190601f1680156101705780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561018957600080fd5b61019d600160a060020a03600435166104c8565b005b34156101aa57600080fd5b6101c1600160a060020a036004351660243561055d565b604051901515815260200160405180910390f35b34156101e057600080fd5b6101e8610584565b60405190815260200160405180910390f35b341561020557600080fd5b6101c1600160a060020a036004358116906024351660443561058a565b604051901515815260200160405180910390f35b341561024157600080fd5b6101c16105b3565b604051901515815260200160405180910390f35b341561026857600080fd5b6102706105bc565b60405160ff909116815260200160405180910390f35b341561029157600080fd5b61019d600160a060020a03600435166024356105c1565b005b34156102b557600080fd5b6101e8600160a060020a0360043516610685565b60405190815260200160405180910390f35b34156102e657600080fd5b61019d6106a4565b005b34156102fb57600080fd5b610303610733565b604051600160a060020a03909116815260200160405180910390f35b341561032a57600080fd5b610106610742565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101435780820151818401525b60200161012a565b50505050905090810190601f1680156101705780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156103b557600080fd5b6101c1600160a060020a0360043516602435610779565b604051901515815260200160405180910390f35b34156103eb57600080fd5b6103036107a0565b604051600160a060020a03909116815260200160405180910390f35b341561041a57600080fd5b6101c1600160a060020a03600435166024356107af565b604051901515815260200160405180910390f35b341561045057600080fd5b6101e8600160a060020a036004358116906024351661086d565b60405190815260200160405180910390f35b341561048757600080fd5b61019d61089a565b005b60408051908101604052600481527f426c6f6b00000000000000000000000000000000000000000000000000000000602082015281565b60015433600160a060020a039081169116146104e357600080fd5b600160a060020a03811615156104f857600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383811691909117918290559081169033167f13a4b3bc0d5234dd3d87c9f1557d8faefa37986da62c36ba49309e2fb2c9aec460405160405180910390a35b5b50565b60065460009060ff161561057057600080fd5b61057a8383610900565b90505b5b92915050565b60035481565b60065460009060ff161561059d57600080fd5b6105a88484846109a9565b90505b5b9392505050565b60065460ff1681565b601281565b60015433600160a060020a039081169116146105dc57600080fd5b60065460ff1615156105ed57600080fd5b600354610600908263ffffffff610abb16565b600355600160a060020a03821660009081526005602052604090205461062c908263ffffffff610abb16565b600160a060020a0383166000818152600560205260408082209390935590917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9084905190815260200160405180910390a35b5b5b5050565b600160a060020a0381166000908152600560205260409020545b919050565b60025460009033600160a060020a039081169116146106c257600080fd5b50600180546002805473ffffffffffffffffffffffffffffffffffffffff19808416600160a060020a03838116919091179586905591169091559081169116817f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35b5b50565b600154600160a060020a031681565b60408051908101604052600381527f424c4f0000000000000000000000000000000000000000000000000000000000602082015281565b60065460009060ff161561078c57600080fd5b61057a8383610ad5565b90505b5b92915050565b600254600160a060020a031681565b60015460009033600160a060020a039081169116146107cd57600080fd5b600154600160a060020a038085169163a9059cbb9116846000604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561084957600080fd5b6102c65a03f1151561085a57600080fd5b50505060405180519150505b5b92915050565b600160a060020a038083166000908152600460209081526040808320938516835292905220545b92915050565b60015433600160a060020a039081169116146108b557600080fd5b60065460ff1615156108c6576108fd565b6006805460ff191690557ff48339e4a272bd7aee715c343ca34ad137607f1df78cf8d7ba137228954d2d8560405160405180910390a15b5b565b600081158015906109355750600160a060020a0333811660009081526004602090815260408083209387168352929052205415155b1561093f57600080fd5b600160a060020a03338116600081815260046020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b600160a060020a0380841660008181526004602090815260408083203390951683529381528382205492825260059052918220546109ed908463ffffffff610b9516565b600160a060020a038087166000908152600560205260408082209390935590861681522054610a22908463ffffffff610abb16565b600160a060020a038516600090815260056020526040902055610a4b818463ffffffff610b9516565b600160a060020a03808716600081815260046020908152604080832033861684529091529081902093909355908616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9086905190815260200160405180910390a3600191505b509392505050565b600082820183811015610aca57fe5b8091505b5092915050565b600160a060020a033316600090815260056020526040812054610afe908363ffffffff610b9516565b600160a060020a033381166000908152600560205260408082209390935590851681522054610b33908363ffffffff610abb16565b600160a060020a0380851660008181526005602052604090819020939093559133909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a35060015b92915050565b600082821115610ba157fe5b508082035b929150505600a165627a7a72305820cd86ff87d6077ca6241da3f17159a15d5919070affb84aea252d7c8af6698ca200296060604052341561000f57600080fd5b604051602080610ca5833981016040528080519150505b5b60008054600160a060020a03191633600160a060020a03161790555b600160a060020a038116151561005857600080fd5b60028054600160a060020a031916600160a060020a0383161790555b505b610c20806100856000396000f300606060405236156100935763ffffffff60e060020a6000350416630952c50481146100985780631a64adae146100b95780633097f94c146100ed57806374a8f1031461011c57806379ba50971461013d5780637c17357d1461015257806383fcf973146101775780638da5cb5b1461018c57806395792430146101bb578063b869cea3146101f0578063d091b5501461024d575b600080fd5b34156100a357600080fd5b6100b7600160a060020a036004351661027c565b005b34156100c457600080fd5b6100db600160a060020a0360043516602435610311565b60405190815260200160405180910390f35b34156100f857600080fd5b6101006103ae565b604051600160a060020a03909116815260200160405180910390f35b341561012757600080fd5b6100b7600160a060020a03600435166103bd565b005b341561014857600080fd5b6100b7610595565b005b341561015d57600080fd5b6100db610624565b60405190815260200160405180910390f35b341561018257600080fd5b6100b761062a565b005b341561019757600080fd5b6101006107cf565b604051600160a060020a03909116815260200160405180910390f35b34156101c657600080fd5b6100b7600160a060020a036004351660243560443560643560843560a43560c43515156107de565b005b34156101fb57600080fd5b61020f600160a060020a0360043516610a33565b60405196875260208701959095526040808701949094526060860192909252608085015260a084015290151560c083015260e0909101905180910390f35b341561025857600080fd5b610100610a74565b604051600160a060020a03909116815260200160405180910390f35b60005433600160a060020a0390811691161461029757600080fd5b600160a060020a03811615156102ac57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383811691909117918290559081169033167f13a4b3bc0d5234dd3d87c9f1557d8faefa37986da62c36ba49309e2fb2c9aec460405160405180910390a35b5b50565b600061031b610bb4565b600160a060020a038416600090815260036020526040908190209060e09051908101604090815282548252600183015460208301526002830154908201526003820154606082015260048201546080820152600582015460a082015260069091015460ff16151560c082015290508051151561039a57600091506103a7565b6103a48184610a83565b91505b5092915050565b600254600160a060020a031681565b6103c5610bb4565b6000805433600160a060020a039081169116146103e157600080fd5b600160a060020a038316600090815260036020526040908190209060e09051908101604090815282548252600183015460208301526002830154908201526003820154606082015260048201546080820152600582015460a082015260069091015460ff16151560c0820190815290925051151561045e57600080fd5b6104748260a0015183519063ffffffff610b3816565b600160a060020a03841660009081526003602081905260408220828155600181018390556002810183905590810182905560048082018390556005820192909255600601805460ff19169055549091506104d4908263ffffffff610b3816565b600455600254600160a060020a031663a9059cbb338360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561053657600080fd5b6102c65a03f1151561054757600080fd5b50505060405180515050600160a060020a0383167f740528a7c317c81f0923adc30df75db3f448298c78cdaf548adfcfdb3c84ff6f8260405190815260200160405180910390a25b5b505050565b60015460009033600160a060020a039081169116146105b357600080fd5b50600080546001805473ffffffffffffffffffffffffffffffffffffffff19808416600160a060020a03838116919091179586905591169091559081169116817f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35b5b50565b60045481565b600160a060020a033316600090815260036020526040812080549091908190151561065457600080fd5b6106b08360e0604051908101604090815282548252600183015460208301526002830154908201526003820154606082015260048201546080820152600582015460a082015260069091015460ff16151560c082015242610a83565b91508115156106be5761058f565b60058301546106d490839063ffffffff610b3816565b90508015156106e25761058f565b60058301546106f7908263ffffffff610b4f16565b600584015560045461070f908263ffffffff610b3816565b600455600254600160a060020a031663a9059cbb338360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561077157600080fd5b6102c65a03f1151561078257600080fd5b50505060405180515050600160a060020a0333167fe7b379c6c1fa169e9079c25e9143b127637eef8ec8c9d5c06ddb4ab3e11958888260405190815260200160405180910390a25b505050565b600054600160a060020a031681565b60005433600160a060020a039081169116146107f957600080fd5b600160a060020a038716151561080e57600080fd5b30600160a060020a031687600160a060020a03161415151561082f57600080fd5b6000861161083c57600080fd5b600160a060020a0387166000908152600360205260409020541561085f57600080fd5b83851115801561086f5750828411155b151561087a57600080fd5b6000821180156108995750610895838663ffffffff610b3816565b8211155b15156108a457600080fd5b600254600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156108fd57600080fd5b6102c65a03f1151561090e57600080fd5b505050604051805160045490915061092c908863ffffffff610b4f16565b111561093757600080fd5b60e0604051908101604090815287825260208083018890528183018790526060830186905260808301859052600060a0840181905284151560c0850152600160a060020a038b168152600390915220815181556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151600691909101805460ff1916911515919091179055506004546109e49087610b4f565b600455600160a060020a038088169033167ffabf00c3717e5e33d6fcc433d4d70ef919a4101fb7d5c444fe349927034eaa458860405190815260200160405180910390a35b5b50505050505050565b600360208190526000918252604090912080546001820154600283015493830154600484015460058501546006909501549395929492939192909160ff1687565b600154600160a060020a031681565b60008060008460400151841015610a9d5760009250610b30565b84606001518410610ab15784519250610b30565b610ada8560800151610ace8760200151879063ffffffff610b3816565b9063ffffffff610b6916565b9150610af5856020015186606001519063ffffffff610b3816565b9050610b2d81610ace610b138860800151869063ffffffff610b8516565b88519063ffffffff610b8516565b9063ffffffff610b6916565b92505b505092915050565b600082821115610b4457fe5b508082035b92915050565b600082820183811015610b5e57fe5b8091505b5092915050565b6000808284811515610b7757fe5b0490508091505b5092915050565b6000828202831580610ba15750828482811515610b9e57fe5b04145b1515610b5e57fe5b8091505b5092915050565b60e06040519081016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160001515815250905600a165627a7a7230582070fe28d3116ed1d12e84879db9c3bea2f6f03d1a331ab0bf6d956e6a4b5006bb0029000000000000000000000000f354e8d1030168d32d94435fc23de1fd6b46840f000000000000000000000000000000000000000000000000000000005acbfe80
Deployed Bytecode
0x606060405236156101c75763ffffffff60e060020a6000350416630423974381146101fc5780630952c5041461022157806317f5de95146102425780631bb534ba1461026757806329dd0d7d146102965780632b905bf6146102b75780633097f94c146102e65780633197cbb61461031557806334fa37da1461033a5780633b8253021461034f57806349432923146103705780634bb278f3146103a1578063518ab2a8146103b657806364329400146103db57806365b9e37d146103f35780636d79207c1461041857806376e532211461043d57806378e979251461046e57806379ba509714610493578063830ced52146104a85780638da5cb5b146104cd57806391f5f3c9146104fc578063999377ec146105215780639ed9331814610536578063a3ea478f1461054c578063a5c9cd821461056c578063ad631abe14610591578063b81a4d8f146105b6578063b8ad2abe14610610578063c28f9df114610634578063c35d1e0114610655578063cfabe67b14610684578063d091b55014610699578063dbeea819146106c8578063dc39d06d146106fa578063dc6055dd14610730578063f47c84c51461075f578063fa73af0b14610784578063fdf97cb2146107a9575b6101fa5b6101d36107d8565b1580156101e257506005544210155b15156101ed57600080fd5b6101f633610801565b5b5b565b005b341561020757600080fd5b61020f610a33565b60405190815260200160405180910390f35b341561022c57600080fd5b6101fa600160a060020a0360043516610a39565b005b341561024d57600080fd5b61020f610ace565b60405190815260200160405180910390f35b341561027257600080fd5b61027a610add565b604051600160a060020a03909116815260200160405180910390f35b34156102a157600080fd5b6101fa600160a060020a0360043516610aec565b005b34156102c257600080fd5b61027a610b70565b604051600160a060020a03909116815260200160405180910390f35b34156102f157600080fd5b61027a610b88565b604051600160a060020a03909116815260200160405180910390f35b341561032057600080fd5b61020f610b97565b60405190815260200160405180910390f35b341561034557600080fd5b6101fa610b9d565b005b341561035a57600080fd5b6101fa600160a060020a0360043516610df4565b005b341561037b57600080fd5b61020f600160a060020a0360043516610f02565b60405190815260200160405180910390f35b34156103ac57600080fd5b6101fa610f14565b005b34156103c157600080fd5b61020f611018565b60405190815260200160405180910390f35b34156103e657600080fd5b6101fa60043561101e565b005b34156103fe57600080fd5b61020f611050565b60405190815260200160405180910390f35b341561042357600080fd5b61020f611056565b60405190815260200160405180910390f35b341561044857600080fd5b61020f600160a060020a036004351661105d565b60405190815260200160405180910390f35b341561047957600080fd5b61020f61106f565b60405190815260200160405180910390f35b341561049e57600080fd5b6101fa611075565b005b34156104b357600080fd5b61020f611104565b60405190815260200160405180910390f35b34156104d857600080fd5b61027a611112565b604051600160a060020a03909116815260200160405180910390f35b341561050757600080fd5b61020f611121565b60405190815260200160405180910390f35b341561052c57600080fd5b6101fa611126565b005b6101fa600160a060020a0360043516610801565b005b341561055757600080fd5b6101fa6004803560248101910135611198565b005b341561057757600080fd5b61020f6111fb565b60405190815260200160405180910390f35b341561059c57600080fd5b61020f611207565b60405190815260200160405180910390f35b34156105c157600080fd5b6105d5600160a060020a036004351661120d565b60405195865260208601949094526040808601939093526060850191909152608084015260ff90911660a083015260c0909101905180910390f35b341561061b57600080fd5b6101fa600160a060020a0360043516602435611245565b005b341561063f57600080fd5b6101fa600160a060020a03600435166113f2565b005b341561066057600080fd5b61027a611476565b604051600160a060020a03909116815260200160405180910390f35b341561068f57600080fd5b6101fa61148e565b005b34156106a457600080fd5b61027a611500565b604051600160a060020a03909116815260200160405180910390f35b34156106d357600080fd5b61027a60043561150f565b604051600160a060020a03909116815260200160405180910390f35b341561070557600080fd5b61071c600160a060020a0360043516602435611541565b604051901515815260200160405180910390f35b341561073b57600080fd5b61027a6115e7565b604051600160a060020a03909116815260200160405180910390f35b341561076a57600080fd5b61020f6115ff565b60405190815260200160405180910390f35b341561078f57600080fd5b61020f61160f565b60405190815260200160405180910390f35b34156107b457600080fd5b61027a611614565b604051600160a060020a03909116815260200160405180910390f35b6000670de0b6b3a7640000630df28e80026007541015806107fb57506006544210155b90505b90565b6000806000806000806000806108156107d8565b15801561082457506005544210155b151561082f57600080fd5b600160a060020a038916151561084457600080fd5b600160a060020a0333166000908152600860209081526040808320546009909252909120549098506108a1906108999061088d670de0b6b3a7640000600f63ffffffff61162316565b9063ffffffff61165216565b600a5461166c565b96506108bc346108b7898b63ffffffff61168616565b61166c565b9550600086116108cb57600080fd5b6007546108fe90611644906108f2906ac18f6d6b0751352a0000009063ffffffff61168616565b9063ffffffff61169d16565b945061090a868661166c565b935061091c888563ffffffff61165216565b600160a060020a033381166000908152600860205260409081902092909255600454169085156108fc0290869051600060405180830381858888f19350505050151561096757600080fd5b600754610986906ac18f6d6b0751352a0000009063ffffffff61168616565b925061099a8461164463ffffffff61162316565b91506116446109af848463ffffffff61168616565b10156109b9578291505b6007546109cc908363ffffffff61165216565b6007556109d989836116b9565b6109e9348563ffffffff61168616565b90506000811115610a2557600160a060020a03331681156108fc0282604051600060405180830381858888f193505050501515610a2557600080fd5b5b5b5b505050505050505050565b600d5481565b60005433600160a060020a03908116911614610a5457600080fd5b600160a060020a0381161515610a6957600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383811691909117918290559081169033167f13a4b3bc0d5234dd3d87c9f1557d8faefa37986da62c36ba49309e2fb2c9aec460405160405180910390a35b5b50565b6ac18f6d6b0751352a00000081565b600454600160a060020a031681565b60005433600160a060020a03908116911614610b0757600080fd5b600254600160a060020a0316630952c5048260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515610b5757600080fd5b6102c65a03f11515610b6857600080fd5b5050505b5b50565b7352aa6a62404107742ac01ff247ed47b49b16c40a81565b600254600160a060020a031681565b60065481565b6000806000610baa6117d3565b6000806000610bb76107d8565b1515610bc257600080fd5b60005433600160a060020a03908116911614610bdd57600080fd5b600b54600d54610bf09190600a0161166c565b9650600d5495505b86861015610de857600b805487908110610c0e57fe5b906000526020600020900160005b9054600160a060020a036101009290920a9004166000818152600c60205260409081902091965060c0905190810160409081528254825260018301546020830152600283015490820152600382015460608201526004820154608082015260059091015460ff1660a0820152935083519250610cb760646108f28660a00151869060ff1663ffffffff61162316565b9063ffffffff61169d16565b9150610cc9838363ffffffff61168616565b90506000811115610cde57610cde85826116b9565b5b6000821115610dd357600354610cfe90600160a060020a0316836116b9565b600354600160a060020a031663957924308684610d266020890151429063ffffffff61165216565b610d3b8960400151429063ffffffff61165216565b610d508a60600151429063ffffffff61165216565b8a60800151600160405160e060020a63ffffffff8a16028152600160a060020a039097166004880152602487019590955260448601939093526064850191909152608484015260a4830152151560c482015260e401600060405180830381600087803b1515610dbe57600080fd5b6102c65a03f11515610dcf57600080fd5b5050505b600d805460010190555b600190950194610bf8565b5b5b5b50505050505050565b6000805433600160a060020a03908116911614610e1057600080fd5b600160a060020a0382161515610e2557600080fd5b5060005b600b54811015610eb95781600160a060020a0316600b82815481101515610e4c57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a03161415610eb057600b805482908110610e8957fe5b906000526020600020900160005b6101000a815490600160a060020a030219169055610eb9565b5b600101610e29565b600160a060020a0382166000908152600c602052604081208181556001810182905560028101829055600381018290556004810191909155600501805460ff191690555b5b5050565b60086020526000908152604090205481565b610f1c6107d8565b1515610f2757600080fd5b60005433600160a060020a03908116911614610f4257600080fd5b600254600160a060020a0316632a8092df6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610f8a57600080fd5b6102c65a03f11515610f9b57600080fd5b505050604051805190501515610fb057600080fd5b600b54600d5414610fc057600080fd5b600254600160a060020a031663ef70aebf6040518163ffffffff1660e060020a028152600401600060405180830381600087803b1515610fff57600080fd5b6102c65a03f1151561101057600080fd5b5050505b5b5b565b60075481565b60005433600160a060020a0390811691161461103957600080fd5b6000811161104657600080fd5b600a8190555b5b50565b600a5481565b62278d0081565b60096020526000908152604090205481565b60055481565b60015460009033600160a060020a0390811691161461109357600080fd5b50600080546001805473ffffffffffffffffffffffffffffffffffffffff19808416600160a060020a03838116919091179586905591169091559081169116817f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35b5b50565b69043c33c193756480000081565b600054600160a060020a031681565b606481565b60005433600160a060020a0390811691161461114157600080fd5b600254600160a060020a03166379ba50976040518163ffffffff1660e060020a028152600401600060405180830381600087803b1515610fff57600080fd5b6102c65a03f1151561101057600080fd5b5050505b5b565b60005433600160a060020a039081169116146111b357600080fd5b610efd8282808060200260200160405190810160405280939291908181526020018383602002808284375069043c33c193756480000094506117659350505050565b5b5b5050565b670de0b6b3a764000081565b61164481565b600c60205260009081526040902080546001820154600283015460038401546004850154600590950154939492939192909160ff1686565b6000805433600160a060020a0390811691161461126157600080fd5b600160a060020a038316151561127657600080fd5b6000821161128357600080fd5b600b5460646001909101111561129857600080fd5b600160a060020a0383166000908152600c6020526040902054156112bb57600080fd5b5060005b600b548110156113185782600160a060020a0316600b828154811015156112e257fe5b906000526020600020900160005b9054600160a060020a036101009290920a900416141561130f57600080fd5b5b6001016112bf565b600b80546001810161132a838261180d565b916000526020600020900160005b8154600160a060020a038088166101009390930a928302920219161790555060c06040519081016040908152838252600060208084018290526301e133808385018190526060850152620151806080850152603260a0850152600160a060020a0387168252600c905220815181556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151600591909101805460ff191660ff909216919091179055505b5b505050565b60005433600160a060020a0390811691161461140d57600080fd5b600354600160a060020a0316630952c5048260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515610b5757600080fd5b6102c65a03f11515610b6857600080fd5b5050505b5b50565b73a67e1c56a5e0363b61a23670ffc0fcd8f09f178d81565b60005433600160a060020a039081169116146114a957600080fd5b600354600160a060020a03166379ba50976040518163ffffffff1660e060020a028152600401600060405180830381600087803b1515610fff57600080fd5b6102c65a03f1151561101057600080fd5b5050505b5b565b600154600160a060020a031681565b600b80548290811061151d57fe5b906000526020600020900160005b915054906101000a9004600160a060020a031681565b6000805433600160a060020a0390811691161461155d57600080fd5b60008054600160a060020a038086169263a9059cbb929091169085906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156115c357600080fd5b6102c65a03f115156115d457600080fd5b50505060405180519150505b5b92915050565b73cf1e64ce2740a03192f1d7a3234aabd88c025c4b81565b6b0129c8f71ad02e2a6800000081565b600a81565b600354600160a060020a031681565b600082820283158061163f575082848281151561163c57fe5b04145b151561164757fe5b8091505b5092915050565b60008282018381101561164757fe5b8091505b5092915050565b600081831061167b578161167d565b825b90505b92915050565b60008282111561169257fe5b508082035b92915050565b60008082848115156116ab57fe5b0490508091505b5092915050565b600254600160a060020a03166340c10f19838360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151561170f57600080fd5b6102c65a03f1151561172057600080fd5b50505081600160a060020a03167f21d739f160a7464fddaac4a1d1517d84e76b75618a053943b345c408c4160fe08260405190815260200160405180910390a25b5050565b6000805433600160a060020a0390811691161461178157600080fd5b5060005b825181101561101057816009600085848151811061179f57fe5b90602001906020020151600160a060020a031681526020810191909152604001600020555b600101611785565b5b5b505050565b60c0604051908101604052806000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b81548183558181151161101057600083815260209020611010918101908301611837565b5b505050565b6107fe91905b80821115611851576000815560010161183d565b5090565b90565b60005433600160a060020a0390811691161461187357600080fd5b600b805460018101611885838261180d565b916000526020600020900160005b8154600160a060020a036101009290920a918202191673a67e1c56a5e0363b61a23670ffc0fcd8f09f178d9091021790555060c0604051908101604052806118ff60646108f26b0129c8f71ad02e2a68000000601263ffffffff61162316565b9063ffffffff61169d16565b81526000602080830182905260408301829052620d2f00606084015262015180608084015260a090920181905273a67e1c56a5e0363b61a23670ffc0fcd8f09f178d9052600c90527fcd72efd5a552ae8b00e80f47cc5c15519eb33b2275d1356fad767525313d6cfc815181556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151600591909101805460ff191660ff90921691909117905550600b8054600181016119c3838261180d565b916000526020600020900160005b8154600160a060020a036101009290920a91820219167352aa6a62404107742ac01ff247ed47b49b16c40a9091021790555060c060405190810160405280611a3d60646108f26b0129c8f71ad02e2a68000000600d63ffffffff61162316565b9063ffffffff61169d16565b81526000602080830182905260408301829052620d2f00606084015262015180608084015260a09092018190527352aa6a62404107742ac01ff247ed47b49b16c40a9052600c90527f5f419449e46e991718ec28a3ebc27fdb5d7a78821599a3815e22121d1f646f64815181556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151600591909101805460ff191660ff90921691909117905550600b805460018101611b01838261180d565b916000526020600020900160005b8154600160a060020a036101009290920a918202191673cf1e64ce2740a03192f1d7a3234aabd88c025c4b9091021790555060c060405190810160405280611b7b60646108f26b0129c8f71ad02e2a68000000600463ffffffff61162316565b9063ffffffff61169d16565b81526000602080830182905260408301829052620d2f00606084015262015180608084015260a090920181905273cf1e64ce2740a03192f1d7a3234aabd88c025c4b9052600c90527fa4dae35cfd6005e9263f99ea9d6b696013c9155b5f35b1c48c1a1773c4aa9ae5815181556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151600591909101805460ff191660ff909216919091179055505b5b5600a165627a7a72305820d22c5d1194a73d933d9f314969e70bdc2e38344120ce41ab6b8a18878aa041330029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000f354e8d1030168d32d94435fc23de1fd6b46840f000000000000000000000000000000000000000000000000000000005acbfe80
-----Decoded View---------------
Arg [0] : _fundingRecipient (address): 0xf354e8d1030168D32D94435Fc23De1fD6B46840f
Arg [1] : _startTime (uint256): 1523318400
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000f354e8d1030168d32d94435fc23de1fd6b46840f
Arg [1] : 000000000000000000000000000000000000000000000000000000005acbfe80
Swarm Source
bzzr://70fe28d3116ed1d12e84879db9c3bea2f6f03d1a331ab0bf6d956e6a4b5006bb
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.