Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Multichain Info
No addresses found
Latest 25 from a total of 49,486 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Release Lock | 19014298 | 459 days ago | IN | 0 ETH | 0.00126781 | ||||
Release Lock Fou... | 11092578 | 1641 days ago | IN | 0 ETH | 0.000765 | ||||
Release Lock | 7313965 | 2236 days ago | IN | 0 ETH | 0.00048584 | ||||
Release Lock Fou... | 5956599 | 2471 days ago | IN | 0 ETH | 0.00056582 | ||||
Release Lock | 5956533 | 2471 days ago | IN | 0 ETH | 0.0005907 | ||||
Release Lock | 5956507 | 2471 days ago | IN | 0 ETH | 0.00092392 | ||||
Release Lock | 5956493 | 2471 days ago | IN | 0 ETH | 0.0005907 | ||||
Release Lock | 5956480 | 2471 days ago | IN | 0 ETH | 0.00062392 | ||||
Release Lock | 5956468 | 2471 days ago | IN | 0 ETH | 0.00092392 | ||||
Release Lock | 5956464 | 2471 days ago | IN | 0 ETH | 0.00062392 | ||||
Release Lock | 5956445 | 2471 days ago | IN | 0 ETH | 0.00092264 | ||||
Release Lock | 5956426 | 2471 days ago | IN | 0 ETH | 0.00062392 | ||||
Release Lock | 5956412 | 2471 days ago | IN | 0 ETH | 0.00092392 | ||||
Release Lock | 5956405 | 2471 days ago | IN | 0 ETH | 0.00062392 | ||||
Release Lock | 5956401 | 2471 days ago | IN | 0 ETH | 0.00062392 | ||||
Release Lock | 5956363 | 2471 days ago | IN | 0 ETH | 0.00092264 | ||||
Release Lock | 5956347 | 2471 days ago | IN | 0 ETH | 0.00062392 | ||||
Release Lock | 5955514 | 2472 days ago | IN | 0 ETH | 0.00062392 | ||||
Release Lock | 5955506 | 2472 days ago | IN | 0 ETH | 0.00092392 | ||||
Verify KYC | 4991144 | 2637 days ago | IN | 0 ETH | 0.00004509 | ||||
Verify KYC | 4991102 | 2637 days ago | IN | 0 ETH | 0.00004502 | ||||
Verify KYC | 4991089 | 2637 days ago | IN | 0 ETH | 0.00004502 | ||||
Verify KYC | 4991071 | 2637 days ago | IN | 0 ETH | 0.00004509 | ||||
Verify KYC | 4987770 | 2637 days ago | IN | 0 ETH | 0.00012036 | ||||
Verify KYC | 4987770 | 2637 days ago | IN | 0 ETH | 0.00018036 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Method | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|---|
Transfer | 4905652 | 2652 days ago | 0.075 ETH | ||||
Transfer | 4904237 | 2652 days ago | 0.002 ETH | ||||
Transfer | 4904149 | 2652 days ago | 0.03402306 ETH | ||||
Transfer | 4904142 | 2652 days ago | 0.03564444 ETH | ||||
Transfer | 4904130 | 2652 days ago | 0.2 ETH | ||||
Transfer | 4904130 | 2652 days ago | 0.25 ETH | ||||
Transfer | 4904129 | 2652 days ago | 0.2 ETH | ||||
Transfer | 4904129 | 2652 days ago | 1 ETH | ||||
Transfer | 4904129 | 2652 days ago | 0.67 ETH | ||||
Transfer | 4904129 | 2652 days ago | 0.5 ETH | ||||
Transfer | 4904129 | 2652 days ago | 0.1 ETH | ||||
Transfer | 4904129 | 2652 days ago | 2.329 ETH | ||||
Transfer | 4904129 | 2652 days ago | 2.195985 ETH | ||||
Transfer | 4904129 | 2652 days ago | 0.98 ETH | ||||
Transfer | 4904129 | 2652 days ago | 0.45 ETH | ||||
Transfer | 4904129 | 2652 days ago | 2.32919254 ETH | ||||
Transfer | 4904129 | 2652 days ago | 1.4 ETH | ||||
Transfer | 4904129 | 2652 days ago | 2.329 ETH | ||||
Transfer | 4904129 | 2652 days ago | 0.65 ETH | ||||
Transfer | 4904129 | 2652 days ago | 0.5 ETH | ||||
Transfer | 4904129 | 2652 days ago | 2.05 ETH | ||||
Transfer | 4904129 | 2652 days ago | 2.329 ETH | ||||
Transfer | 4904129 | 2652 days ago | 2.2802 ETH | ||||
Transfer | 4904129 | 2652 days ago | 1 ETH | ||||
Transfer | 4904129 | 2652 days ago | 1 ETH |
Loading...
Loading
Contract Name:
SelfKeyCrowdsale
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-02-08 */ pragma solidity ^0.4.18; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { 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; } 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; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { uint256 public totalSupply; 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); } /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ 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); } /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { 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)); } } /** * @title CrowdsaleConfig * @dev Holds all constants for SelfKeyCrowdsale contract */ contract CrowdsaleConfig { uint256 public constant TOKEN_DECIMALS = 18; uint256 public constant MIN_TOKEN_UNIT = 10 ** uint256(TOKEN_DECIMALS); // Initial distribution amounts uint256 public constant TOTAL_SUPPLY_CAP = 6000000000 * MIN_TOKEN_UNIT; // 33% of the total supply cap uint256 public constant SALE_CAP = 1980000000 * MIN_TOKEN_UNIT; // Minimum cap per purchaser on public sale = $100 in KEY (at $0.015) uint256 public constant PURCHASER_MIN_TOKEN_CAP = 6666 * MIN_TOKEN_UNIT; // Maximum cap per purchaser on first day of public sale = $3,000 in KEY (at $0.015) uint256 public constant PURCHASER_MAX_TOKEN_CAP_DAY1 = 200000 * MIN_TOKEN_UNIT; // Maximum cap per purchaser on public sale = $18,000 in KEY (at $0.015) uint256 public constant PURCHASER_MAX_TOKEN_CAP = 1200000 * MIN_TOKEN_UNIT; // 16.5% uint256 public constant FOUNDATION_POOL_TOKENS = 876666666 * MIN_TOKEN_UNIT; uint256 public constant FOUNDATION_POOL_TOKENS_VESTED = 113333334 * MIN_TOKEN_UNIT; // Approx 33% uint256 public constant COMMUNITY_POOL_TOKENS = 1980000000 * MIN_TOKEN_UNIT; // Founders' distribution. Total = 16.5% uint256 public constant FOUNDERS_TOKENS = 330000000 * MIN_TOKEN_UNIT; uint256 public constant FOUNDERS_TOKENS_VESTED_1 = 330000000 * MIN_TOKEN_UNIT; uint256 public constant FOUNDERS_TOKENS_VESTED_2 = 330000000 * MIN_TOKEN_UNIT; // 1% for legal advisors uint256 public constant LEGAL_EXPENSES_1_TOKENS = 54000000 * MIN_TOKEN_UNIT; uint256 public constant LEGAL_EXPENSES_2_TOKENS = 6000000 * MIN_TOKEN_UNIT; // KEY price in USD (thousandths) uint256 public constant TOKEN_PRICE_THOUSANDTH = 15; // $0.015 per KEY // Contract wallet addresses for initial allocation address public constant CROWDSALE_WALLET_ADDR = 0xE0831b1687c9faD3447a517F9371E66672505dB0; address public constant FOUNDATION_POOL_ADDR = 0xD68947892Ef4D94Cdef7165b109Cf6Cd3f58A8e8; address public constant FOUNDATION_POOL_ADDR_VEST = 0xd0C24Bb82e71A44eA770e84A3c79979F9233308D; address public constant COMMUNITY_POOL_ADDR = 0x0506c5485AE54aB14C598Ef16C459409E5d8Fc03; address public constant FOUNDERS_POOL_ADDR = 0x4452d6454e777743a5Ee233fbe873055008fF528; address public constant LEGAL_EXPENSES_ADDR_1 = 0xb57911380F13A0a9a6Ba6562248674B5f56D7BFE; address public constant LEGAL_EXPENSES_ADDR_2 = 0x9be281CdcF34B3A01468Ad1008139410Ba5BB2fB; // 6 months period, in seconds, for pre-commitment half-vesting uint64 public constant PRECOMMITMENT_VESTING_SECONDS = 15552000; } /** * @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; } } /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; /** * @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]; } } /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * @dev https://github.com/ethereum/EIPs/issues/20 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ 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; } } /** * @title Mintable token * @dev Simple ERC20 Token example, with mintable token creation * @dev Issue: * https://github.com/OpenZeppelin/zeppelin-solidity/issues/120 * Based on code by TokenMarketNet: https://github.com/TokenMarketNet/ico/blob/master/contracts/MintableToken.sol */ contract MintableToken is StandardToken, Ownable { event Mint(address indexed to, uint256 amount); event MintFinished(); bool public mintingFinished = false; modifier canMint() { require(!mintingFinished); _; } /** * @dev Function to mint tokens * @param _to The address that will receive the minted tokens. * @param _amount The amount of tokens to mint. * @return A boolean that indicates if the operation was successful. */ function mint(address _to, uint256 _amount) onlyOwner canMint public returns (bool) { totalSupply = totalSupply.add(_amount); balances[_to] = balances[_to].add(_amount); Mint(_to, _amount); Transfer(address(0), _to, _amount); return true; } /** * @dev Function to stop minting new tokens. * @return True if the operation was successful. */ function finishMinting() onlyOwner canMint public returns (bool) { mintingFinished = true; MintFinished(); return true; } } /* solhint-disable not-rely-on-time */ /** * @title SelfKeyToken * @dev SelfKey Token implementation. */ contract SelfKeyToken is MintableToken { string public constant name = 'SelfKey'; //solhint-disable-line const-name-snakecase string public constant symbol = 'KEY'; //solhint-disable-line const-name-snakecase uint256 public constant decimals = 18; //solhint-disable-line const-name-snakecase uint256 public cap; bool private transfersEnabled = false; event Burned(address indexed burner, uint256 value); /** * @dev Only the contract owner can transfer without restrictions. * Regular holders need to wait until sale is finalized. * @param _sender — The address sending the tokens * @param _value — The number of tokens to send */ modifier canTransfer(address _sender, uint256 _value) { require(transfersEnabled || _sender == owner); _; } /** * @dev Constructor that sets a maximum supply cap. * @param _cap — The maximum supply cap. */ function SelfKeyToken(uint256 _cap) public { cap = _cap; } /** * @dev Overrides MintableToken.mint() for restricting supply under cap * @param _to — The address to receive minted tokens * @param _value — The number of tokens to mint */ function mint(address _to, uint256 _value) public onlyOwner canMint returns (bool) { require(totalSupply.add(_value) <= cap); return super.mint(_to, _value); } /** * @dev Checks modifier and allows transfer if tokens are not locked. * @param _to — The address to receive tokens * @param _value — The number of tokens to send */ function transfer(address _to, uint256 _value) public canTransfer(msg.sender, _value) returns (bool) { return super.transfer(_to, _value); } /** * @dev Checks modifier and allows transfer if tokens are not locked. * @param _from — The address to send tokens from * @param _to — The address to receive tokens * @param _value — The number of tokens to send */ function transferFrom(address _from, address _to, uint256 _value) public canTransfer(_from, _value) returns (bool) { return super.transferFrom(_from, _to, _value); } /** * @dev Enables token transfers. * Called when the token sale is successfully finalized */ function enableTransfers() public onlyOwner { transfersEnabled = true; } /** * @dev Burns a specific number of tokens. * @param _value — The number of tokens to be burned. */ function burn(uint256 _value) public onlyOwner { require(_value > 0); address burner = msg.sender; balances[burner] = balances[burner].sub(_value); totalSupply = totalSupply.sub(_value); Burned(burner, _value); } } /** * @title TokenTimelock * @dev TokenTimelock is a token holder contract that will allow a * beneficiary to extract the tokens after a given release time */ contract TokenTimelock { using SafeERC20 for ERC20Basic; // ERC20 basic token contract being held ERC20Basic public token; // beneficiary of tokens after they are released address public beneficiary; // timestamp when token release is enabled uint256 public releaseTime; function TokenTimelock(ERC20Basic _token, address _beneficiary, uint256 _releaseTime) public { require(_releaseTime > now); token = _token; beneficiary = _beneficiary; releaseTime = _releaseTime; } /** * @notice Transfers tokens held by timelock to beneficiary. */ function release() public { require(now >= releaseTime); uint256 amount = token.balanceOf(this); require(amount > 0); token.safeTransfer(beneficiary, amount); } } /** * @title RefundVault * @dev This contract is used for storing funds while a crowdsale * is in progress. Supports refunding the money if crowdsale fails, * and forwarding it if crowdsale is successful. */ contract RefundVault is Ownable { using SafeMath for uint256; enum State { Active, Refunding, Closed } mapping (address => uint256) public deposited; address public wallet; State public state; event Closed(); event RefundsEnabled(); event Refunded(address indexed beneficiary, uint256 weiAmount); function RefundVault(address _wallet) public { require(_wallet != address(0)); wallet = _wallet; state = State.Active; } function deposit(address investor) onlyOwner public payable { require(state == State.Active); deposited[investor] = deposited[investor].add(msg.value); } function close() onlyOwner public { require(state == State.Active); state = State.Closed; Closed(); wallet.transfer(this.balance); } function enableRefunds() onlyOwner public { require(state == State.Active); state = State.Refunding; RefundsEnabled(); } function refund(address investor) public { require(state == State.Refunding); uint256 depositedValue = deposited[investor]; deposited[investor] = 0; investor.transfer(depositedValue); Refunded(investor, depositedValue); } } /** * @title SelfKeyCrowdsale * @dev SelfKey Token Crowdsale implementation. */ // solhint-disable-next-line max-states-count contract SelfKeyCrowdsale is Ownable, CrowdsaleConfig { using SafeMath for uint256; using SafeERC20 for SelfKeyToken; // whitelist of addresses that can perform precommitments and KYC verifications mapping(address => bool) public isVerifier; // Token contract SelfKeyToken public token; uint64 public startTime; uint64 public endTime; // Minimum tokens expected to sell uint256 public goal; // How many tokens a buyer gets per ETH uint256 public rate = 51800; // ETH price in USD, can be later updated until start date uint256 public ethPrice = 777; // Total amount of tokens purchased, including pre-sale uint256 public totalPurchased = 0; mapping(address => bool) public kycVerified; mapping(address => uint256) public tokensPurchased; // a mapping of dynamically instantiated token timelocks for each pre-commitment beneficiary mapping(address => address) public vestedTokens; bool public isFinalized = false; // Token Timelocks TokenTimelock public foundersTimelock1; TokenTimelock public foundersTimelock2; TokenTimelock public foundationTimelock; // Vault to hold funds until crowdsale is finalized. Allows refunding if crowdsale is not successful. RefundVault public vault; // Crowdsale events event TokenPurchase( address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount ); event VerifiedKYC(address indexed participant); event AddedPrecommitment( address indexed participant, uint256 tokensAllocated ); event Finalized(); modifier verifierOnly() { require(isVerifier[msg.sender]); _; } /** * @dev Crowdsale contract constructor * @param _startTime — Unix timestamp representing the crowdsale start time * @param _endTime — Unix timestamp representing the crowdsale start time * @param _goal — Minimum amount of tokens expected to sell. */ function SelfKeyCrowdsale( uint64 _startTime, uint64 _endTime, uint256 _goal ) public { require(_endTime > _startTime); // sets contract owner as a verifier isVerifier[msg.sender] = true; token = new SelfKeyToken(TOTAL_SUPPLY_CAP); // mints all possible tokens to the crowdsale contract token.mint(address(this), TOTAL_SUPPLY_CAP); token.finishMinting(); startTime = _startTime; endTime = _endTime; goal = _goal; vault = new RefundVault(CROWDSALE_WALLET_ADDR); // Set timelocks to 6 months and a year after startTime, respectively uint64 sixMonthLock = uint64(startTime + 15552000); uint64 yearLock = uint64(startTime + 31104000); // Instantiation of token timelocks foundersTimelock1 = new TokenTimelock(token, FOUNDERS_POOL_ADDR, sixMonthLock); foundersTimelock2 = new TokenTimelock(token, FOUNDERS_POOL_ADDR, yearLock); foundationTimelock = new TokenTimelock(token, FOUNDATION_POOL_ADDR_VEST, yearLock); // Genesis allocation of tokens token.safeTransfer(FOUNDATION_POOL_ADDR, FOUNDATION_POOL_TOKENS); token.safeTransfer(COMMUNITY_POOL_ADDR, COMMUNITY_POOL_TOKENS); token.safeTransfer(FOUNDERS_POOL_ADDR, FOUNDERS_TOKENS); token.safeTransfer(LEGAL_EXPENSES_ADDR_1, LEGAL_EXPENSES_1_TOKENS); token.safeTransfer(LEGAL_EXPENSES_ADDR_2, LEGAL_EXPENSES_2_TOKENS); // Allocation of vested tokens token.safeTransfer(foundersTimelock1, FOUNDERS_TOKENS_VESTED_1); token.safeTransfer(foundersTimelock2, FOUNDERS_TOKENS_VESTED_2); token.safeTransfer(foundationTimelock, FOUNDATION_POOL_TOKENS_VESTED); } /** * @dev Fallback function is used to buy tokens. * It's the only entry point since `buyTokens` is internal */ function () public payable { buyTokens(msg.sender); } /** * @dev Adds an address to the whitelist of Verifiers * @param _address - address of the verifier */ function addVerifier (address _address) public onlyOwner { isVerifier[_address] = true; } /** * @dev Removes an address from the whitelist of Verifiers * @param _address - address of the verifier to be removed */ function removeVerifier (address _address) public onlyOwner { isVerifier[_address] = false; } /** * @dev Sets a new start date as long as token hasn't started yet * @param _startTime - unix timestamp of the new start time */ function setStartTime (uint64 _startTime) public onlyOwner { require(now < startTime); require(_startTime > now); require(_startTime < endTime); startTime = _startTime; } /** * @dev Sets a new end date as long as end date hasn't been reached * @param _endTime - unix timestamp of the new end time */ function setEndTime (uint64 _endTime) public onlyOwner { require(now < endTime); require(_endTime > now); require(_endTime > startTime); endTime = _endTime; } /** * @dev Updates the ETH/USD conversion rate as long as the public sale hasn't started * @param _ethPrice - Updated conversion rate */ function setEthPrice(uint256 _ethPrice) public onlyOwner { require(now < startTime); require(_ethPrice > 0); ethPrice = _ethPrice; rate = ethPrice.mul(1000).div(TOKEN_PRICE_THOUSANDTH); } /** * @dev Must be called after crowdsale ends, to do some extra finalization * work. Calls the contract's finalization function. */ function finalize() public onlyOwner { require(now > startTime); require(!isFinalized); finalization(); Finalized(); isFinalized = true; } /** * @dev If crowdsale is unsuccessful, a refund can be claimed back */ function claimRefund(address participant) public { // requires sale to be finalized and goal not reached, require(isFinalized); require(!goalReached()); vault.refund(participant); } /** * @dev If crowdsale is unsuccessful, participants can claim refunds */ function goalReached() public constant returns (bool) { return totalPurchased >= goal; } /** * @dev Release time-locked tokens */ function releaseLockFounders1() public { foundersTimelock1.release(); } function releaseLockFounders2() public { foundersTimelock2.release(); } function releaseLockFoundation() public { foundationTimelock.release(); } /** * @dev Release time-locked tokens for any vested address */ function releaseLock(address participant) public { require(vestedTokens[participant] != 0x0); TokenTimelock timelock = TokenTimelock(vestedTokens[participant]); timelock.release(); } /** * @dev Verifies KYC for given participant. * This enables token purchases by the participant addres */ function verifyKYC(address participant) public verifierOnly { kycVerified[participant] = true; VerifiedKYC(participant); } /** * @dev Adds an address for pre-sale commitments made off-chain. * @param beneficiary — Address of the already verified participant * @param tokensAllocated — Exact amount of KEY tokens (including decimal places) to allocate * @param halfVesting — determines whether the half the tokens will be time-locked or not */ function addPrecommitment( address beneficiary, uint256 tokensAllocated, bool halfVesting ) public verifierOnly { // requires to be on pre-sale require(now < startTime); // solhint-disable-line not-rely-on-time kycVerified[beneficiary] = true; uint256 tokens = tokensAllocated; totalPurchased = totalPurchased.add(tokens); tokensPurchased[beneficiary] = tokensPurchased[beneficiary].add(tokens); if (halfVesting) { // half the tokens are put into a time-lock for a pre-defined period uint64 endTimeLock = uint64(startTime + PRECOMMITMENT_VESTING_SECONDS); // Sets a timelock for half the tokens allocated uint256 half = tokens.div(2); TokenTimelock timelock; if (vestedTokens[beneficiary] == 0x0) { timelock = new TokenTimelock(token, beneficiary, endTimeLock); vestedTokens[beneficiary] = address(timelock); } else { timelock = TokenTimelock(vestedTokens[beneficiary]); } token.safeTransfer(beneficiary, half); token.safeTransfer(timelock, tokens.sub(half)); } else { // all tokens are sent to the participant's address token.safeTransfer(beneficiary, tokens); } AddedPrecommitment( beneficiary, tokens ); } /** * @dev Additional finalization logic. Enables token transfers. */ function finalization() internal { if (goalReached()) { burnUnsold(); vault.close(); token.enableTransfers(); } else { vault.enableRefunds(); } } /** * @dev Low level token purchase. Only callable internally. Participants MUST be KYC-verified before purchase * @param participant — The address of the token purchaser */ function buyTokens(address participant) internal { require(kycVerified[participant]); require(now >= startTime); require(now < endTime); require(!isFinalized); require(msg.value != 0); // Calculate the token amount to be allocated uint256 weiAmount = msg.value; uint256 tokens = weiAmount.mul(rate); // Update state tokensPurchased[participant] = tokensPurchased[participant].add(tokens); totalPurchased = totalPurchased.add(tokens); require(totalPurchased <= SALE_CAP); require(tokensPurchased[participant] >= PURCHASER_MIN_TOKEN_CAP); if (now < startTime + 86400) { // if still during the first day of token sale, apply different max cap require(tokensPurchased[participant] <= PURCHASER_MAX_TOKEN_CAP_DAY1); } else { require(tokensPurchased[participant] <= PURCHASER_MAX_TOKEN_CAP); } // Sends ETH contribution to the RefundVault and tokens to participant vault.deposit.value(msg.value)(participant); token.safeTransfer(participant, tokens); TokenPurchase( msg.sender, participant, weiAmount, tokens ); } /** * @dev Burn all remaining (unsold) tokens. * This should be called after sale finalization */ function burnUnsold() internal { // All tokens held by this contract get burned token.burn(token.balanceOf(this)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":false,"inputs":[{"name":"_ethPrice","type":"uint256"}],"name":"setEthPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"releaseLockFounders1","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"SALE_CAP","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MIN_TOKEN_UNIT","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PURCHASER_MIN_TOKEN_CAP","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"tokensPurchased","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"endTime","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"isVerifier","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_startTime","type":"uint64"}],"name":"setStartTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"releaseLockFoundation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"participant","type":"address"}],"name":"verifyKYC","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"vestedTokens","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"beneficiary","type":"address"},{"name":"tokensAllocated","type":"uint256"},{"name":"halfVesting","type":"bool"}],"name":"addPrecommitment","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"goal","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"FOUNDATION_POOL_ADDR","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"FOUNDERS_POOL_ADDR","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOTAL_SUPPLY_CAP","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"finalize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"COMMUNITY_POOL_TOKENS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PURCHASER_MAX_TOKEN_CAP_DAY1","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"FOUNDATION_POOL_TOKENS_VESTED","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_DECIMALS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PRECOMMITMENT_VESTING_SECONDS","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"FOUNDERS_TOKENS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"releaseLockFounders2","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"LEGAL_EXPENSES_2_TOKENS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"FOUNDERS_TOKENS_VESTED_2","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"startTime","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"goalReached","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isFinalized","outputs":[{"name":"","type":"bool"}],"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":"CROWDSALE_WALLET_ADDR","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"addVerifier","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"FOUNDERS_TOKENS_VESTED_1","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"FOUNDATION_POOL_TOKENS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"kycVerified","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"LEGAL_EXPENSES_ADDR_2","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"LEGAL_EXPENSES_1_TOKENS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"COMMUNITY_POOL_ADDR","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"participant","type":"address"}],"name":"claimRefund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"foundersTimelock1","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"foundersTimelock2","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"removeVerifier","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"participant","type":"address"}],"name":"releaseLock","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"PURCHASER_MAX_TOKEN_CAP","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"LEGAL_EXPENSES_ADDR_1","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"FOUNDATION_POOL_ADDR_VEST","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalPurchased","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_endTime","type":"uint64"}],"name":"setEndTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"foundationTimelock","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_PRICE_THOUSANDTH","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":"vault","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ethPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_startTime","type":"uint64"},{"name":"_endTime","type":"uint64"},{"name":"_goal","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"purchaser","type":"address"},{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"TokenPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"participant","type":"address"}],"name":"VerifiedKYC","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"participant","type":"address"},{"indexed":false,"name":"tokensAllocated","type":"uint256"}],"name":"AddedPrecommitment","type":"event"},{"anonymous":false,"inputs":[],"name":"Finalized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]
Contract Creation Code
606060405261ca586005556103096006556000600755600b805460ff1916905534156200002b57600080fd5b604051606080620038f183398101604052808051919060200180519190602001805160008054600160a060020a03191633600160a060020a03161781559092509050806001604060020a03858116908516116200008757600080fd5b600160a060020a0333166000908152600160208190526040909120805460ff191690911790556b1363156bbee3016d70000000620000c462000749565b908152602001604051809103906000f0801515620000e157600080fd5b60028054600160a060020a031916600160a060020a039283161790819055166340c10f19306b1363156bbee3016d700000006000604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156200017957600080fd5b6102c65a03f115156200018b57600080fd5b50505060405180515050600254600160a060020a0316637d64bcb46000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515620001f757600080fd5b6102c65a03f115156200020957600080fd5b505050604051805150506002805460a060020a60e060020a031916740100000000000000000000000000000000000000006001604060020a0388811691909102919091179091556003805467ffffffffffffffff1916918616919091179055600483905573e0831b1687c9fad3447a517f9371e66672505db06200028c6200075a565b600160a060020a039091168152602001604051809103906000f0801515620002b357600080fd5b600e8054600160a060020a031916600160a060020a039283161790556002547401000000000000000000000000000000000000000081046001604060020a031662ed4e00810194506301da9c0001925016734452d6454e777743a5ee233fbe873055008ff52883620003246200076b565b600160a060020a0393841681529190921660208201526001604060020a0390911660408083019190915260609091019051809103906000f08015156200036957600080fd5b600b805461010060a860020a031916610100600160a060020a039384160217905560025416734452d6454e777743a5ee233fbe873055008ff52882620003ae6200076b565b600160a060020a0393841681529190921660208201526001604060020a0390911660408083019190915260609091019051809103906000f0801515620003f357600080fd5b600c8054600160a060020a031916600160a060020a039283161790556002541673d0c24bb82e71a44ea770e84a3c79979f9233308d82620004336200076b565b600160a060020a0393841681529190921660208201526001604060020a0390911660408083019190915260609091019051809103906000f08015156200047857600080fd5b600d8054600160a060020a031916600160a060020a03928316179055600254620004d3911673d68947892ef4d94cdef7165b109cf6cd3f58a8e86b02d5296330eea14992680000640100000000620006a881026200151f1704565b6002546200051a90600160a060020a0316730506c5485ae54ab14c598ef16c459409e5d8fc036b0665d14f1378fde93c0000006401000000006200151f620006a882021704565b6002546200056190600160a060020a0316734452d6454e777743a5ee233fbe873055008ff5286b0110f837d8942a518a0000006401000000006200151f620006a882021704565b600254620005a790600160a060020a031673b57911380f13a0a9a6ba6562248674b5f56d7bfe6a2caaf1dd9f3a1ff60000006401000000006200151f620006a882021704565b600254620005ed90600160a060020a0316739be281cdcf34b3a01468ad1008139410ba5bb2fb6a04f68ca6d8cd91c60000006401000000006200151f620006a882021704565b600b546002546200062c91600160a060020a0391821691610100909104166b0110f837d8942a518a0000006401000000006200151f620006a882021704565b600c546002546200066591600160a060020a0391821691166b0110f837d8942a518a0000006401000000006200151f620006a882021704565b600d546002546200069d91600160a060020a0391821691166a5dbf4458cdddab0b9800006401000000006200151f620006a882021704565b50505050506200077c565b82600160a060020a031663a9059cbb83836000604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156200071f57600080fd5b6102c65a03f115156200073157600080fd5b5050506040518051905015156200074457fe5b505050565b604051610ded806200221d83390190565b60405161060c806200300a83390190565b6040516102db806200361683390190565b611a91806200078c6000396000f3006060604052600436106102835763ffffffff60e060020a6000350416629f9262811461028e57806309d929d6146102a45780630b45e8db146102b75780632803d8e5146102dc57806328675325146102ef5780632ad92740146103025780632c4e722e146103215780633197cbb614610334578063331052181461036457806338812e58146103975780633888188d146103b757806338d16011146103ca5780633dee0397146103e95780633e5b5e3914610424578063401938831461044b5780634451967c1461045e57806346602ce71461047157806348931352146104845780634bb278f314610497578063515f128b146102b757806353fe7a59146104aa57806355176f51146104bd5780635b7f415c146104d057806365d5b48d146104e357806365f6d6a2146104f65780636a4113c7146105095780637619d22e1461051c578063769f194f146104f657806378e979251461052f5780637d3d6522146105425780638d4e4083146105555780638da5cb5b146105685780638e1b9f421461057b5780639000b3d61461058e57806397fdf5f2146104f65780639e43692c146105ad578063a5410a66146105c0578063abbcb24b146105df578063accfaeba146105f2578063bdf5fba114610605578063bffa55d514610618578063c0489af514610637578063c61f11031461064a578063ca2dfd0a1461065d578063d1c469161461067c578063d1ff535e1461069b578063daa0f79f146106ae578063e565b387146106c1578063e632c2f3146106d4578063e945c391146106e7578063ec0de26e14610707578063f0757a911461071a578063f2fde38b1461072d578063fbfa77cf1461074c578063fc0c546a1461075f578063ff186b2e14610772575b61028c33610785565b005b341561029957600080fd5b61028c600435610a1d565b34156102af57600080fd5b61028c610a92565b34156102c257600080fd5b6102ca610aec565b60405190815260200160405180910390f35b34156102e757600080fd5b6102ca610afc565b34156102fa57600080fd5b6102ca610b08565b341561030d57600080fd5b6102ca600160a060020a0360043516610b16565b341561032c57600080fd5b6102ca610b28565b341561033f57600080fd5b610347610b2e565b60405167ffffffffffffffff909116815260200160405180910390f35b341561036f57600080fd5b610383600160a060020a0360043516610b3e565b604051901515815260200160405180910390f35b34156103a257600080fd5b61028c67ffffffffffffffff60043516610b53565b34156103c257600080fd5b61028c610c01565b34156103d557600080fd5b61028c600160a060020a0360043516610c40565b34156103f457600080fd5b610408600160a060020a0360043516610cba565b604051600160a060020a03909116815260200160405180910390f35b341561042f57600080fd5b61028c600160a060020a03600435166024356044351515610cd5565b341561045657600080fd5b6102ca610f63565b341561046957600080fd5b610408610f69565b341561047c57600080fd5b610408610f81565b341561048f57600080fd5b6102ca610f99565b34156104a257600080fd5b61028c610fa9565b34156104b557600080fd5b6102ca611036565b34156104c857600080fd5b6102ca611044565b34156104db57600080fd5b6102ca611053565b34156104ee57600080fd5b610347611058565b341561050157600080fd5b6102ca61105f565b341561051457600080fd5b61028c61106f565b341561052757600080fd5b6102ca6110ae565b341561053a57600080fd5b6103476110bd565b341561054d57600080fd5b6103836110d4565b341561056057600080fd5b6103836110df565b341561057357600080fd5b6104086110e8565b341561058657600080fd5b6104086110f7565b341561059957600080fd5b61028c600160a060020a036004351661110f565b34156105b857600080fd5b6102ca611151565b34156105cb57600080fd5b610383600160a060020a0360043516611161565b34156105ea57600080fd5b610408611176565b34156105fd57600080fd5b6102ca61118e565b341561061057600080fd5b61040861119d565b341561062357600080fd5b61028c600160a060020a03600435166111b5565b341561064257600080fd5b61040861123f565b341561065557600080fd5b610408611253565b341561066857600080fd5b61028c600160a060020a0360043516611262565b341561068757600080fd5b61028c600160a060020a036004351661129e565b34156106a657600080fd5b6102ca611333565b34156106b957600080fd5b610408611341565b34156106cc57600080fd5b610408611359565b34156106df57600080fd5b6102ca611371565b34156106f257600080fd5b61028c67ffffffffffffffff60043516611377565b341561071257600080fd5b610408611407565b341561072557600080fd5b6102ca611416565b341561073857600080fd5b61028c600160a060020a036004351661141b565b341561075757600080fd5b6104086114b6565b341561076a57600080fd5b6104086114c5565b341561077d57600080fd5b6102ca6114d4565b600160a060020a038116600090815260086020526040812054819060ff1615156107ae57600080fd5b60025460a060020a900467ffffffffffffffff164210156107ce57600080fd5b60035467ffffffffffffffff1642106107e657600080fd5b600b5460ff16156107f657600080fd5b34151561080257600080fd5b60055434925061081990839063ffffffff6114da16565b600160a060020a038416600090815260096020526040902054909150610845908263ffffffff61151016565b600160a060020a038416600090815260096020526040902055600754610871908263ffffffff61151016565b60078190556b0665d14f1378fde93c00000090111561088f57600080fd5b600160a060020a0383166000908152600960205260409020546901695d556204b1e800009010156108bf57600080fd5b6002546201518067ffffffffffffffff60a060020a9092048216011642101561091757600160a060020a038316600090815260096020526040902054692a5a058fc295ed00000090111561091257600080fd5b610947565b600160a060020a03831660009081526009602052604090205469fe1c215e8f838e00000090111561094757600080fd5b600e54600160a060020a031663f340fa01348560405160e060020a63ffffffff8516028152600160a060020a0390911660048201526024016000604051808303818588803b151561099757600080fd5b6125ee5a03f115156109a857600080fd5b50506002546109ca9250600160a060020a03169050848363ffffffff61151f16565b82600160a060020a031633600160a060020a03167f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad18848460405191825260208201526040908101905180910390a3505050565b60005433600160a060020a03908116911614610a3857600080fd5b60025460a060020a900467ffffffffffffffff164210610a5757600080fd5b60008111610a6457600080fd5b6006819055610a8c600f610a80836103e863ffffffff6114da16565b9063ffffffff61159f16565b60055550565b600b546101009004600160a060020a03166386d1a69f6040518163ffffffff1660e060020a028152600401600060405180830381600087803b1515610ad657600080fd5b6102c65a03f11515610ae757600080fd5b505050565b6b0665d14f1378fde93c00000081565b670de0b6b3a764000081565b6901695d556204b1e8000081565b60096020526000908152604090205481565b60055481565b60035467ffffffffffffffff1681565b60016020526000908152604090205460ff1681565b60005433600160a060020a03908116911614610b6e57600080fd5b60025460a060020a900467ffffffffffffffff164210610b8d57600080fd5b4267ffffffffffffffff821611610ba357600080fd5b60035467ffffffffffffffff90811690821610610bbf57600080fd5b6002805467ffffffffffffffff90921660a060020a027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600d54600160a060020a03166386d1a69f6040518163ffffffff1660e060020a028152600401600060405180830381600087803b1515610ad657600080fd5b600160a060020a03331660009081526001602052604090205460ff161515610c6757600080fd5b600160a060020a03811660008181526008602052604090819020805460ff191660011790557f98cc2c535b6060b431d35630893358290dcd38687f6487e2882d331955020805905160405180910390a250565b600a60205260009081526040902054600160a060020a031681565b600160a060020a03331660009081526001602052604081205481908190819060ff161515610d0257600080fd5b60025460a060020a900467ffffffffffffffff164210610d2157600080fd5b600160a060020a0387166000908152600860205260409020805460ff19166001179055600754869450610d5a908563ffffffff61151016565b600755600160a060020a038716600090815260096020526040902054610d86908563ffffffff61151016565b600160a060020a0388166000908152600960205260409020558415610f00576002805467ffffffffffffffff60a060020a9091041662ed4e00019350610dd390859063ffffffff61159f16565b600160a060020a038089166000908152600a6020526040902054919350161515610e9457600254600160a060020a03168784610e0d61177a565b600160a060020a03938416815291909216602082015267ffffffffffffffff90911660408083019190915260609091019051809103906000f0801515610e5257600080fd5b600160a060020a038881166000908152600a60205260409020805473ffffffffffffffffffffffffffffffffffffffff19169183169190911790559050610eb1565b50600160a060020a038087166000908152600a6020526040902054165b600254610ece90600160a060020a0316888463ffffffff61151f16565b610efb81610ee2868563ffffffff6115b616565b600254600160a060020a0316919063ffffffff61151f16565b610f1d565b600254610f1d90600160a060020a0316888663ffffffff61151f16565b86600160a060020a03167fd4cab39bf07f5b24c1fa485061de865fae1bb7f0bcf434dd70bf1a33689ca4068560405190815260200160405180910390a250505050505050565b60045481565b73d68947892ef4d94cdef7165b109cf6cd3f58a8e881565b734452d6454e777743a5ee233fbe873055008ff52881565b6b1363156bbee3016d7000000081565b60005433600160a060020a03908116911614610fc457600080fd5b60025460a060020a900467ffffffffffffffff164211610fe357600080fd5b600b5460ff1615610ff357600080fd5b610ffb6115c8565b7f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768160405160405180910390a1600b805460ff19166001179055565b692a5a058fc295ed00000081565b6a5dbf4458cdddab0b98000081565b601281565b62ed4e0081565b6b0110f837d8942a518a00000081565b600c54600160a060020a03166386d1a69f6040518163ffffffff1660e060020a028152600401600060405180830381600087803b1515610ad657600080fd5b6a04f68ca6d8cd91c600000081565b60025460a060020a900467ffffffffffffffff1681565b600454600754101590565b600b5460ff1681565b600054600160a060020a031681565b73e0831b1687c9fad3447a517f9371e66672505db081565b60005433600160a060020a0390811691161461112a57600080fd5b600160a060020a03166000908152600160208190526040909120805460ff19169091179055565b6b02d5296330eea1499268000081565b60086020526000908152604090205460ff1681565b739be281cdcf34b3a01468ad1008139410ba5bb2fb81565b6a2caaf1dd9f3a1ff600000081565b730506c5485ae54ab14c598ef16c459409e5d8fc0381565b600b5460ff1615156111c657600080fd5b6111ce6110d4565b156111d857600080fd5b600e54600160a060020a031663fa89401a8260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b151561122857600080fd5b6102c65a03f1151561123957600080fd5b50505050565b600b546101009004600160a060020a031681565b600c54600160a060020a031681565b60005433600160a060020a0390811691161461127d57600080fd5b600160a060020a03166000908152600160205260409020805460ff19169055565b600160a060020a038082166000908152600a602052604081205490911615156112c657600080fd5b50600160a060020a038082166000908152600a602052604090819020549091169081906386d1a69f90518163ffffffff1660e060020a028152600401600060405180830381600087803b151561131b57600080fd5b6102c65a03f1151561132c57600080fd5b5050505050565b69fe1c215e8f838e00000081565b73b57911380f13a0a9a6ba6562248674b5f56d7bfe81565b73d0c24bb82e71a44ea770e84a3c79979f9233308d81565b60075481565b60005433600160a060020a0390811691161461139257600080fd5b60035467ffffffffffffffff1642106113aa57600080fd5b4267ffffffffffffffff8216116113c057600080fd5b60025467ffffffffffffffff60a060020a9091048116908216116113e357600080fd5b6003805467ffffffffffffffff191667ffffffffffffffff92909216919091179055565b600d54600160a060020a031681565b600f81565b60005433600160a060020a0390811691161461143657600080fd5b600160a060020a038116151561144b57600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600e54600160a060020a031681565b600254600160a060020a031681565b60065481565b6000808315156114ed5760009150611509565b508282028284828115156114fd57fe5b041461150557fe5b8091505b5092915050565b60008282018381101561150557fe5b82600160a060020a031663a9059cbb838360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561157c57600080fd5b6102c65a03f1151561158d57600080fd5b505050604051805190501515610ae757fe5b60008082848115156115ad57fe5b04949350505050565b6000828211156115c257fe5b50900390565b6115d06110d4565b15611689576115dd6116ca565b600e54600160a060020a03166343d726d66040518163ffffffff1660e060020a028152600401600060405180830381600087803b151561161c57600080fd5b6102c65a03f1151561162d57600080fd5b5050600254600160a060020a0316905063af35c6c76040518163ffffffff1660e060020a028152600401600060405180830381600087803b151561167057600080fd5b6102c65a03f1151561168157600080fd5b5050506116c8565b600e54600160a060020a0316638c52dc416040518163ffffffff1660e060020a028152600401600060405180830381600087803b1515610ad657600080fd5b565b600254600160a060020a03166342966c68816370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561172957600080fd5b6102c65a03f1151561173a57600080fd5b5050506040518051905060405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b1515610ad657600080fd5b6040516102db8061178b8339019056006060604052341561000f57600080fd5b6040516060806102db83398101604052808051919060200180519190602001805191505042811161003f57600080fd5b60008054600160a060020a03948516600160a060020a031991821617909155600180549390941692169190911790915560025561025a806100816000396000f3006060604052600436106100485763ffffffff60e060020a60003504166338af3eed811461004d57806386d1a69f1461007c578063b91d400114610091578063fc0c546a146100b6575b600080fd5b341561005857600080fd5b6100606100c9565b604051600160a060020a03909116815260200160405180910390f35b341561008757600080fd5b61008f6100d8565b005b341561009c57600080fd5b6100a4610194565b60405190815260200160405180910390f35b34156100c157600080fd5b61006061019a565b600154600160a060020a031681565b6002546000904210156100ea57600080fd5b60008054600160a060020a0316906370a082319030906040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561014557600080fd5b6102c65a03f1151561015657600080fd5b50505060405180519150506000811161016e57600080fd5b60015460005461019191600160a060020a0391821691168363ffffffff6101a916565b50565b60025481565b600054600160a060020a031681565b82600160a060020a031663a9059cbb838360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561020657600080fd5b6102c65a03f1151561021757600080fd5b50505060405180519050151561022957fe5b5050505600a165627a7a72305820eeace2909ad96851c2cbf01b9bbc7140e82c263f6ff3790a8a0e12d0640aff770029a165627a7a72305820c3ad1fcd1df61752f4ec3ce0d3bdcac8b42dc2436f35caf58d05e1ba22122dcb002960606040526003805460a060020a60ff02191690556005805460ff19169055341561002957600080fd5b604051602080610ded8339810160405280805160038054600160a060020a03191633600160a060020a031617905560045550610d8190508061006c6000396000f3006060604052600436106101065763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166305d2035b811461010b57806306fdde0314610132578063095ea7b3146101bc57806318160ddd146101de57806323b872dd14610203578063313ce5671461022b578063355274ea1461023e57806340c10f191461025157806342966c6814610273578063661884631461028b57806370a08231146102ad5780637d64bcb4146102cc5780638da5cb5b146102df57806395d89b411461030e578063a9059cbb14610321578063af35c6c714610343578063d73dd62314610356578063dd62ed3e14610378578063f2fde38b1461039d575b600080fd5b341561011657600080fd5b61011e6103bc565b604051901515815260200160405180910390f35b341561013d57600080fd5b6101456103cc565b60405160208082528190810183818151815260200191508051906020019080838360005b83811015610181578082015183820152602001610169565b50505050905090810190601f1680156101ae5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101c757600080fd5b61011e600160a060020a0360043516602435610403565b34156101e957600080fd5b6101f161046f565b60405190815260200160405180910390f35b341561020e57600080fd5b61011e600160a060020a0360043581169060243516604435610475565b341561023657600080fd5b6101f16104ba565b341561024957600080fd5b6101f16104bf565b341561025c57600080fd5b61011e600160a060020a03600435166024356104c5565b341561027e57600080fd5b61028960043561052c565b005b341561029657600080fd5b61011e600160a060020a03600435166024356105ed565b34156102b857600080fd5b6101f1600160a060020a03600435166106e7565b34156102d757600080fd5b61011e610702565b34156102ea57600080fd5b6102f261078d565b604051600160a060020a03909116815260200160405180910390f35b341561031957600080fd5b61014561079c565b341561032c57600080fd5b61011e600160a060020a03600435166024356107d3565b341561034e57600080fd5b610289610816565b341561036157600080fd5b61011e600160a060020a0360043516602435610840565b341561038357600080fd5b6101f1600160a060020a03600435811690602435166108e4565b34156103a857600080fd5b610289600160a060020a036004351661090f565b60035460a060020a900460ff1681565b60408051908101604052600781527f53656c664b657900000000000000000000000000000000000000000000000000602082015281565b600160a060020a03338116600081815260026020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b60005481565b6005546000908490839060ff168061049a5750600354600160a060020a038381169116145b15156104a557600080fd5b6104b08686866109aa565b9695505050505050565b601281565b60045481565b60035460009033600160a060020a039081169116146104e357600080fd5b60035460a060020a900460ff16156104fa57600080fd5b600454600054610510908463ffffffff610b2c16565b111561051b57600080fd5b6105258383610b3b565b9392505050565b60035460009033600160a060020a0390811691161461054a57600080fd5b6000821161055757600080fd5b5033600160a060020a03811660009081526001602052604090205461057c9083610c48565b600160a060020a038216600090815260016020526040812091909155546105a9908363ffffffff610c4816565b600055600160a060020a0381167f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df78360405190815260200160405180910390a25050565b600160a060020a0333811660009081526002602090815260408083209386168352929052908120548083111561064a57600160a060020a033381166000908152600260209081526040808320938816835292905290812055610681565b61065a818463ffffffff610c4816565b600160a060020a033381166000908152600260209081526040808320938916835292905220555b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020547f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925915190815260200160405180910390a35060019392505050565b600160a060020a031660009081526001602052604090205490565b60035460009033600160a060020a0390811691161461072057600080fd5b60035460a060020a900460ff161561073757600080fd5b6003805474ff0000000000000000000000000000000000000000191660a060020a1790557fae5184fba832cb2b1f702aca6117b8d265eaf03ad33eb133f19dde0f5920fa0860405160405180910390a150600190565b600354600160a060020a031681565b60408051908101604052600381527f4b45590000000000000000000000000000000000000000000000000000000000602082015281565b6005546000903390839060ff16806107f85750600354600160a060020a038381169116145b151561080357600080fd5b61080d8585610c5a565b95945050505050565b60035433600160a060020a0390811691161461083157600080fd5b6005805460ff19166001179055565b600160a060020a033381166000908152600260209081526040808320938616835292905290812054610878908363ffffffff610b2c16565b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020849055919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591905190815260200160405180910390a350600192915050565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b60035433600160a060020a0390811691161461092a57600080fd5b600160a060020a038116151561093f57600080fd5b600354600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000600160a060020a03831615156109c157600080fd5b600160a060020a0384166000908152600160205260409020548211156109e657600080fd5b600160a060020a0380851660009081526002602090815260408083203390941683529290522054821115610a1957600080fd5b600160a060020a038416600090815260016020526040902054610a42908363ffffffff610c4816565b600160a060020a038086166000908152600160205260408082209390935590851681522054610a77908363ffffffff610b2c16565b600160a060020a03808516600090815260016020908152604080832094909455878316825260028152838220339093168252919091522054610abf908363ffffffff610c4816565b600160a060020a03808616600081815260026020908152604080832033861684529091529081902093909355908516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a35060019392505050565b60008282018381101561052557fe5b60035460009033600160a060020a03908116911614610b5957600080fd5b60035460a060020a900460ff1615610b7057600080fd5b600054610b83908363ffffffff610b2c16565b6000908155600160a060020a038416815260016020526040902054610bae908363ffffffff610b2c16565b600160a060020a0384166000818152600160205260409081902092909255907f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968859084905190815260200160405180910390a2600160a060020a03831660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405190815260200160405180910390a350600192915050565b600082821115610c5457fe5b50900390565b6000600160a060020a0383161515610c7157600080fd5b600160a060020a033316600090815260016020526040902054821115610c9657600080fd5b600160a060020a033316600090815260016020526040902054610cbf908363ffffffff610c4816565b600160a060020a033381166000908152600160205260408082209390935590851681522054610cf4908363ffffffff610b2c16565b600160a060020a0380851660008181526001602052604090819020939093559133909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a3506001929150505600a165627a7a72305820a0db4a7417f51dac893a505484403c713964d24a776ca71d61c0b642f6760aae00296060604052341561000f57600080fd5b60405160208061060c8339810160405280805160008054600160a060020a03191633600160a060020a039081169190911790915590925082161515905061005557600080fd5b60028054600160a060020a031916600160a060020a03929092169190911760a060020a60ff021916905561057e8061008e6000396000f3006060604052600436106100985763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166343d726d6811461009d578063521eb273146100b25780638c52dc41146100e15780638da5cb5b146100f4578063c19d93fb14610107578063cb13cddb1461013e578063f2fde38b1461016f578063f340fa011461018e578063fa89401a146101a2575b600080fd5b34156100a857600080fd5b6100b06101c1565b005b34156100bd57600080fd5b6100c561029c565b604051600160a060020a03909116815260200160405180910390f35b34156100ec57600080fd5b6100b06102ab565b34156100ff57600080fd5b6100c561033c565b341561011257600080fd5b61011a61034b565b6040518082600281111561012a57fe5b60ff16815260200191505060405180910390f35b341561014957600080fd5b61015d600160a060020a036004351661035b565b60405190815260200160405180910390f35b341561017a57600080fd5b6100b0600160a060020a036004351661036d565b6100b0600160a060020a0360043516610408565b34156101ad57600080fd5b6100b0600160a060020a036004351661048c565b60005433600160a060020a039081169116146101dc57600080fd5b60006002805460a060020a900460ff16908111156101f657fe5b1461020057600080fd5b6002805474ff00000000000000000000000000000000000000001916740200000000000000000000000000000000000000001790557f1cdde67b72a90f19919ac732a437ac2f7a10fc128d28c2a6e525d89ce5cd9d3a60405160405180910390a1600254600160a060020a039081169030163180156108fc0290604051600060405180830381858888f19350505050151561029a57600080fd5b565b600254600160a060020a031681565b60005433600160a060020a039081169116146102c657600080fd5b60006002805460a060020a900460ff16908111156102e057fe5b146102ea57600080fd5b6002805474ff0000000000000000000000000000000000000000191660a060020a1790557f599d8e5a83cffb867d051598c4d70e805d59802d8081c1c7d6dffc5b6aca2b8960405160405180910390a1565b600054600160a060020a031681565b60025460a060020a900460ff1681565b60016020526000908152604090205481565b60005433600160a060020a0390811691161461038857600080fd5b600160a060020a038116151561039d57600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60005433600160a060020a0390811691161461042357600080fd5b60006002805460a060020a900460ff169081111561043d57fe5b1461044757600080fd5b600160a060020a038116600090815260016020526040902054610470903463ffffffff61053c16565b600160a060020a03909116600090815260016020526040902055565b600060016002805460a060020a900460ff16908111156104a857fe5b146104b257600080fd5b50600160a060020a038116600081815260016020526040808220805492905590919082156108fc0290839051600060405180830381858888f1935050505015156104fb57600080fd5b81600160a060020a03167fd7dee2702d63ad89917b6a4da9981c90c4d24f8c2bdfd64c604ecae57d8d06518260405190815260200160405180910390a25050565b60008282018381101561054b57fe5b93925050505600a165627a7a72305820b275974688f037b488146289ceb926584b3323febeb882aeae13bf10f90e62ab00296060604052341561000f57600080fd5b6040516060806102db83398101604052808051919060200180519190602001805191505042811161003f57600080fd5b60008054600160a060020a03948516600160a060020a031991821617909155600180549390941692169190911790915560025561025a806100816000396000f3006060604052600436106100485763ffffffff60e060020a60003504166338af3eed811461004d57806386d1a69f1461007c578063b91d400114610091578063fc0c546a146100b6575b600080fd5b341561005857600080fd5b6100606100c9565b604051600160a060020a03909116815260200160405180910390f35b341561008757600080fd5b61008f6100d8565b005b341561009c57600080fd5b6100a4610194565b60405190815260200160405180910390f35b34156100c157600080fd5b61006061019a565b600154600160a060020a031681565b6002546000904210156100ea57600080fd5b60008054600160a060020a0316906370a082319030906040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561014557600080fd5b6102c65a03f1151561015657600080fd5b50505060405180519150506000811161016e57600080fd5b60015460005461019191600160a060020a0391821691168363ffffffff6101a916565b50565b60025481565b600054600160a060020a031681565b82600160a060020a031663a9059cbb838360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561020657600080fd5b6102c65a03f1151561021757600080fd5b50505060405180519050151561022957fe5b5050505600a165627a7a72305820eeace2909ad96851c2cbf01b9bbc7140e82c263f6ff3790a8a0e12d0640aff770029000000000000000000000000000000000000000000000000000000005a5a9d80000000000000000000000000000000000000000000000000000000005a72588000000000000000000000000000000000000000000089dd0a1aa2c008994d6800
Deployed Bytecode
0x6060604052600436106102835763ffffffff60e060020a6000350416629f9262811461028e57806309d929d6146102a45780630b45e8db146102b75780632803d8e5146102dc57806328675325146102ef5780632ad92740146103025780632c4e722e146103215780633197cbb614610334578063331052181461036457806338812e58146103975780633888188d146103b757806338d16011146103ca5780633dee0397146103e95780633e5b5e3914610424578063401938831461044b5780634451967c1461045e57806346602ce71461047157806348931352146104845780634bb278f314610497578063515f128b146102b757806353fe7a59146104aa57806355176f51146104bd5780635b7f415c146104d057806365d5b48d146104e357806365f6d6a2146104f65780636a4113c7146105095780637619d22e1461051c578063769f194f146104f657806378e979251461052f5780637d3d6522146105425780638d4e4083146105555780638da5cb5b146105685780638e1b9f421461057b5780639000b3d61461058e57806397fdf5f2146104f65780639e43692c146105ad578063a5410a66146105c0578063abbcb24b146105df578063accfaeba146105f2578063bdf5fba114610605578063bffa55d514610618578063c0489af514610637578063c61f11031461064a578063ca2dfd0a1461065d578063d1c469161461067c578063d1ff535e1461069b578063daa0f79f146106ae578063e565b387146106c1578063e632c2f3146106d4578063e945c391146106e7578063ec0de26e14610707578063f0757a911461071a578063f2fde38b1461072d578063fbfa77cf1461074c578063fc0c546a1461075f578063ff186b2e14610772575b61028c33610785565b005b341561029957600080fd5b61028c600435610a1d565b34156102af57600080fd5b61028c610a92565b34156102c257600080fd5b6102ca610aec565b60405190815260200160405180910390f35b34156102e757600080fd5b6102ca610afc565b34156102fa57600080fd5b6102ca610b08565b341561030d57600080fd5b6102ca600160a060020a0360043516610b16565b341561032c57600080fd5b6102ca610b28565b341561033f57600080fd5b610347610b2e565b60405167ffffffffffffffff909116815260200160405180910390f35b341561036f57600080fd5b610383600160a060020a0360043516610b3e565b604051901515815260200160405180910390f35b34156103a257600080fd5b61028c67ffffffffffffffff60043516610b53565b34156103c257600080fd5b61028c610c01565b34156103d557600080fd5b61028c600160a060020a0360043516610c40565b34156103f457600080fd5b610408600160a060020a0360043516610cba565b604051600160a060020a03909116815260200160405180910390f35b341561042f57600080fd5b61028c600160a060020a03600435166024356044351515610cd5565b341561045657600080fd5b6102ca610f63565b341561046957600080fd5b610408610f69565b341561047c57600080fd5b610408610f81565b341561048f57600080fd5b6102ca610f99565b34156104a257600080fd5b61028c610fa9565b34156104b557600080fd5b6102ca611036565b34156104c857600080fd5b6102ca611044565b34156104db57600080fd5b6102ca611053565b34156104ee57600080fd5b610347611058565b341561050157600080fd5b6102ca61105f565b341561051457600080fd5b61028c61106f565b341561052757600080fd5b6102ca6110ae565b341561053a57600080fd5b6103476110bd565b341561054d57600080fd5b6103836110d4565b341561056057600080fd5b6103836110df565b341561057357600080fd5b6104086110e8565b341561058657600080fd5b6104086110f7565b341561059957600080fd5b61028c600160a060020a036004351661110f565b34156105b857600080fd5b6102ca611151565b34156105cb57600080fd5b610383600160a060020a0360043516611161565b34156105ea57600080fd5b610408611176565b34156105fd57600080fd5b6102ca61118e565b341561061057600080fd5b61040861119d565b341561062357600080fd5b61028c600160a060020a03600435166111b5565b341561064257600080fd5b61040861123f565b341561065557600080fd5b610408611253565b341561066857600080fd5b61028c600160a060020a0360043516611262565b341561068757600080fd5b61028c600160a060020a036004351661129e565b34156106a657600080fd5b6102ca611333565b34156106b957600080fd5b610408611341565b34156106cc57600080fd5b610408611359565b34156106df57600080fd5b6102ca611371565b34156106f257600080fd5b61028c67ffffffffffffffff60043516611377565b341561071257600080fd5b610408611407565b341561072557600080fd5b6102ca611416565b341561073857600080fd5b61028c600160a060020a036004351661141b565b341561075757600080fd5b6104086114b6565b341561076a57600080fd5b6104086114c5565b341561077d57600080fd5b6102ca6114d4565b600160a060020a038116600090815260086020526040812054819060ff1615156107ae57600080fd5b60025460a060020a900467ffffffffffffffff164210156107ce57600080fd5b60035467ffffffffffffffff1642106107e657600080fd5b600b5460ff16156107f657600080fd5b34151561080257600080fd5b60055434925061081990839063ffffffff6114da16565b600160a060020a038416600090815260096020526040902054909150610845908263ffffffff61151016565b600160a060020a038416600090815260096020526040902055600754610871908263ffffffff61151016565b60078190556b0665d14f1378fde93c00000090111561088f57600080fd5b600160a060020a0383166000908152600960205260409020546901695d556204b1e800009010156108bf57600080fd5b6002546201518067ffffffffffffffff60a060020a9092048216011642101561091757600160a060020a038316600090815260096020526040902054692a5a058fc295ed00000090111561091257600080fd5b610947565b600160a060020a03831660009081526009602052604090205469fe1c215e8f838e00000090111561094757600080fd5b600e54600160a060020a031663f340fa01348560405160e060020a63ffffffff8516028152600160a060020a0390911660048201526024016000604051808303818588803b151561099757600080fd5b6125ee5a03f115156109a857600080fd5b50506002546109ca9250600160a060020a03169050848363ffffffff61151f16565b82600160a060020a031633600160a060020a03167f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad18848460405191825260208201526040908101905180910390a3505050565b60005433600160a060020a03908116911614610a3857600080fd5b60025460a060020a900467ffffffffffffffff164210610a5757600080fd5b60008111610a6457600080fd5b6006819055610a8c600f610a80836103e863ffffffff6114da16565b9063ffffffff61159f16565b60055550565b600b546101009004600160a060020a03166386d1a69f6040518163ffffffff1660e060020a028152600401600060405180830381600087803b1515610ad657600080fd5b6102c65a03f11515610ae757600080fd5b505050565b6b0665d14f1378fde93c00000081565b670de0b6b3a764000081565b6901695d556204b1e8000081565b60096020526000908152604090205481565b60055481565b60035467ffffffffffffffff1681565b60016020526000908152604090205460ff1681565b60005433600160a060020a03908116911614610b6e57600080fd5b60025460a060020a900467ffffffffffffffff164210610b8d57600080fd5b4267ffffffffffffffff821611610ba357600080fd5b60035467ffffffffffffffff90811690821610610bbf57600080fd5b6002805467ffffffffffffffff90921660a060020a027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600d54600160a060020a03166386d1a69f6040518163ffffffff1660e060020a028152600401600060405180830381600087803b1515610ad657600080fd5b600160a060020a03331660009081526001602052604090205460ff161515610c6757600080fd5b600160a060020a03811660008181526008602052604090819020805460ff191660011790557f98cc2c535b6060b431d35630893358290dcd38687f6487e2882d331955020805905160405180910390a250565b600a60205260009081526040902054600160a060020a031681565b600160a060020a03331660009081526001602052604081205481908190819060ff161515610d0257600080fd5b60025460a060020a900467ffffffffffffffff164210610d2157600080fd5b600160a060020a0387166000908152600860205260409020805460ff19166001179055600754869450610d5a908563ffffffff61151016565b600755600160a060020a038716600090815260096020526040902054610d86908563ffffffff61151016565b600160a060020a0388166000908152600960205260409020558415610f00576002805467ffffffffffffffff60a060020a9091041662ed4e00019350610dd390859063ffffffff61159f16565b600160a060020a038089166000908152600a6020526040902054919350161515610e9457600254600160a060020a03168784610e0d61177a565b600160a060020a03938416815291909216602082015267ffffffffffffffff90911660408083019190915260609091019051809103906000f0801515610e5257600080fd5b600160a060020a038881166000908152600a60205260409020805473ffffffffffffffffffffffffffffffffffffffff19169183169190911790559050610eb1565b50600160a060020a038087166000908152600a6020526040902054165b600254610ece90600160a060020a0316888463ffffffff61151f16565b610efb81610ee2868563ffffffff6115b616565b600254600160a060020a0316919063ffffffff61151f16565b610f1d565b600254610f1d90600160a060020a0316888663ffffffff61151f16565b86600160a060020a03167fd4cab39bf07f5b24c1fa485061de865fae1bb7f0bcf434dd70bf1a33689ca4068560405190815260200160405180910390a250505050505050565b60045481565b73d68947892ef4d94cdef7165b109cf6cd3f58a8e881565b734452d6454e777743a5ee233fbe873055008ff52881565b6b1363156bbee3016d7000000081565b60005433600160a060020a03908116911614610fc457600080fd5b60025460a060020a900467ffffffffffffffff164211610fe357600080fd5b600b5460ff1615610ff357600080fd5b610ffb6115c8565b7f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768160405160405180910390a1600b805460ff19166001179055565b692a5a058fc295ed00000081565b6a5dbf4458cdddab0b98000081565b601281565b62ed4e0081565b6b0110f837d8942a518a00000081565b600c54600160a060020a03166386d1a69f6040518163ffffffff1660e060020a028152600401600060405180830381600087803b1515610ad657600080fd5b6a04f68ca6d8cd91c600000081565b60025460a060020a900467ffffffffffffffff1681565b600454600754101590565b600b5460ff1681565b600054600160a060020a031681565b73e0831b1687c9fad3447a517f9371e66672505db081565b60005433600160a060020a0390811691161461112a57600080fd5b600160a060020a03166000908152600160208190526040909120805460ff19169091179055565b6b02d5296330eea1499268000081565b60086020526000908152604090205460ff1681565b739be281cdcf34b3a01468ad1008139410ba5bb2fb81565b6a2caaf1dd9f3a1ff600000081565b730506c5485ae54ab14c598ef16c459409e5d8fc0381565b600b5460ff1615156111c657600080fd5b6111ce6110d4565b156111d857600080fd5b600e54600160a060020a031663fa89401a8260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b151561122857600080fd5b6102c65a03f1151561123957600080fd5b50505050565b600b546101009004600160a060020a031681565b600c54600160a060020a031681565b60005433600160a060020a0390811691161461127d57600080fd5b600160a060020a03166000908152600160205260409020805460ff19169055565b600160a060020a038082166000908152600a602052604081205490911615156112c657600080fd5b50600160a060020a038082166000908152600a602052604090819020549091169081906386d1a69f90518163ffffffff1660e060020a028152600401600060405180830381600087803b151561131b57600080fd5b6102c65a03f1151561132c57600080fd5b5050505050565b69fe1c215e8f838e00000081565b73b57911380f13a0a9a6ba6562248674b5f56d7bfe81565b73d0c24bb82e71a44ea770e84a3c79979f9233308d81565b60075481565b60005433600160a060020a0390811691161461139257600080fd5b60035467ffffffffffffffff1642106113aa57600080fd5b4267ffffffffffffffff8216116113c057600080fd5b60025467ffffffffffffffff60a060020a9091048116908216116113e357600080fd5b6003805467ffffffffffffffff191667ffffffffffffffff92909216919091179055565b600d54600160a060020a031681565b600f81565b60005433600160a060020a0390811691161461143657600080fd5b600160a060020a038116151561144b57600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600e54600160a060020a031681565b600254600160a060020a031681565b60065481565b6000808315156114ed5760009150611509565b508282028284828115156114fd57fe5b041461150557fe5b8091505b5092915050565b60008282018381101561150557fe5b82600160a060020a031663a9059cbb838360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561157c57600080fd5b6102c65a03f1151561158d57600080fd5b505050604051805190501515610ae757fe5b60008082848115156115ad57fe5b04949350505050565b6000828211156115c257fe5b50900390565b6115d06110d4565b15611689576115dd6116ca565b600e54600160a060020a03166343d726d66040518163ffffffff1660e060020a028152600401600060405180830381600087803b151561161c57600080fd5b6102c65a03f1151561162d57600080fd5b5050600254600160a060020a0316905063af35c6c76040518163ffffffff1660e060020a028152600401600060405180830381600087803b151561167057600080fd5b6102c65a03f1151561168157600080fd5b5050506116c8565b600e54600160a060020a0316638c52dc416040518163ffffffff1660e060020a028152600401600060405180830381600087803b1515610ad657600080fd5b565b600254600160a060020a03166342966c68816370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561172957600080fd5b6102c65a03f1151561173a57600080fd5b5050506040518051905060405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b1515610ad657600080fd5b6040516102db8061178b8339019056006060604052341561000f57600080fd5b6040516060806102db83398101604052808051919060200180519190602001805191505042811161003f57600080fd5b60008054600160a060020a03948516600160a060020a031991821617909155600180549390941692169190911790915560025561025a806100816000396000f3006060604052600436106100485763ffffffff60e060020a60003504166338af3eed811461004d57806386d1a69f1461007c578063b91d400114610091578063fc0c546a146100b6575b600080fd5b341561005857600080fd5b6100606100c9565b604051600160a060020a03909116815260200160405180910390f35b341561008757600080fd5b61008f6100d8565b005b341561009c57600080fd5b6100a4610194565b60405190815260200160405180910390f35b34156100c157600080fd5b61006061019a565b600154600160a060020a031681565b6002546000904210156100ea57600080fd5b60008054600160a060020a0316906370a082319030906040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561014557600080fd5b6102c65a03f1151561015657600080fd5b50505060405180519150506000811161016e57600080fd5b60015460005461019191600160a060020a0391821691168363ffffffff6101a916565b50565b60025481565b600054600160a060020a031681565b82600160a060020a031663a9059cbb838360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561020657600080fd5b6102c65a03f1151561021757600080fd5b50505060405180519050151561022957fe5b5050505600a165627a7a72305820eeace2909ad96851c2cbf01b9bbc7140e82c263f6ff3790a8a0e12d0640aff770029a165627a7a72305820c3ad1fcd1df61752f4ec3ce0d3bdcac8b42dc2436f35caf58d05e1ba22122dcb0029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000005a5a9d80000000000000000000000000000000000000000000000000000000005a72588000000000000000000000000000000000000000000089dd0a1aa2c008994d6800
-----Decoded View---------------
Arg [0] : _startTime (uint64): 1515888000
Arg [1] : _endTime (uint64): 1517443200
Arg [2] : _goal (uint256): 166666666666666660000000000
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000005a5a9d80
Arg [1] : 000000000000000000000000000000000000000000000000000000005a725880
Arg [2] : 00000000000000000000000000000000000000000089dd0a1aa2c008994d6800
Swarm Source
bzzr://eeace2909ad96851c2cbf01b9bbc7140e82c263f6ff3790a8a0e12d0640aff77
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.