More Info
Private Name Tags
ContractCreator
Multichain Info
No addresses found
Latest 25 from a total of 524 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 9556613 | 1870 days ago | IN | 0 ETH | 0.000234 | ||||
Transfer | 6318363 | 2401 days ago | IN | 0 ETH | 0.000585 | ||||
Transfer | 5263145 | 2582 days ago | IN | 0 ETH | 0.00028671 | ||||
Transfer | 5143234 | 2602 days ago | IN | 0 ETH | 0.0005206 | ||||
Claim All | 5107241 | 2608 days ago | IN | 0 ETH | 0.0036442 | ||||
Claim All | 4957507 | 2633 days ago | IN | 0 ETH | 0.0203034 | ||||
Claim All | 4947382 | 2635 days ago | IN | 0 ETH | 0.0059869 | ||||
Claim All | 4900308 | 2644 days ago | IN | 0 ETH | 0.0004691 | ||||
Claim All | 4885991 | 2646 days ago | IN | 0 ETH | 0.0304551 | ||||
Claim All | 4881443 | 2647 days ago | IN | 0 ETH | 0.013015 | ||||
Claim All | 4881419 | 2647 days ago | IN | 0 ETH | 0.013015 | ||||
Claim All | 4872896 | 2649 days ago | IN | 0 ETH | 0.004691 | ||||
Claim All | 4868089 | 2650 days ago | IN | 0 ETH | 0.0054663 | ||||
Claim All | 4848415 | 2653 days ago | IN | 0 ETH | 0.00710619 | ||||
Claim All | 4831753 | 2656 days ago | IN | 0 ETH | 0.0018764 | ||||
Claim All | 4813059 | 2659 days ago | IN | 0 ETH | 0.015618 | ||||
Claim All | 4812935 | 2659 days ago | IN | 0 ETH | 0.015618 | ||||
Claim All | 4773768 | 2666 days ago | IN | 0 ETH | 0.0091105 | ||||
Claim All | 4773758 | 2666 days ago | IN | 0 ETH | 0.0091105 | ||||
Claim All | 4756071 | 2669 days ago | IN | 0 ETH | 0.0239476 | ||||
Claim All | 4753457 | 2670 days ago | IN | 0 ETH | 0.010412 | ||||
Claim All | 4749533 | 2670 days ago | IN | 0 ETH | 0.00197022 | ||||
Claim All | 4745765 | 2671 days ago | IN | 0 ETH | 0.013015 | ||||
Claim All | 4743284 | 2671 days ago | IN | 0 ETH | 0.010412 | ||||
Claim All | 4735909 | 2673 days ago | IN | 0 ETH | 0.0190019 |
Loading...
Loading
Contract Name:
PreICOProxyBuyer
Compiler Version
v0.4.8+commit.60cc1668
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2017-07-28 */ /** * Math operations with safety checks */ contract SafeMath { function safeMul(uint a, uint b) internal returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function safeDiv(uint a, uint b) internal returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function safeSub(uint a, uint b) internal returns (uint) { assert(b <= a); return a - b; } function safeAdd(uint a, uint b) internal returns (uint) { uint c = a + b; assert(c>=a && c>=b); 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; } function assert(bool assertion) internal { if (!assertion) { throw; } } } /** * Safe unsigned safe math. * * https://blog.aragon.one/library-driven-development-in-solidity-2bebcaf88736#.750gwtwli * * Originally from https://raw.githubusercontent.com/AragonOne/zeppelin-solidity/master/contracts/SafeMathLib.sol * * Maintained here until merged to mainline zeppelin-solidity. * */ library SafeMathLib { function times(uint a, uint b) returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function minus(uint a, uint b) returns (uint) { assert(b <= a); return a - b; } function plus(uint a, uint b) returns (uint) { uint c = a + b; assert(c>=a); return c; } function assert(bool assertion) private { if (!assertion) throw; } } /* * Ownable * * Base contract with an owner. * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner. */ contract Ownable { address public owner; function Ownable() { owner = msg.sender; } modifier onlyOwner() { if (msg.sender != owner) { throw; } _; } function transferOwnership(address newOwner) onlyOwner { if (newOwner != address(0)) { owner = newOwner; } } } /* * Haltable * * Abstract contract that allows children to implement an * emergency stop mechanism. Differs from Pausable by causing a throw when in halt mode. * * * Originally envisioned in FirstBlood ICO contract. */ contract Haltable is Ownable { bool public halted; modifier stopInEmergency { if (halted) throw; _; } modifier onlyInEmergency { if (!halted) throw; _; } // called by the owner on emergency, triggers stopped state function halt() external onlyOwner { halted = true; } // called by the owner on end of emergency, returns to normal state function unhalt() external onlyOwner onlyInEmergency { halted = false; } } /** * Interface for defining crowdsale pricing. */ contract PricingStrategy { /** Interface declaration. */ function isPricingStrategy() public constant returns (bool) { return true; } /** Self check if all references are correctly set. * * Checks that pricing strategy matches crowdsale parameters. */ function isSane(address crowdsale) public constant returns (bool) { return true; } /** * When somebody tries to buy tokens for X eth, calculate how many tokens they get. * * * @param value - What is the value of the transaction send in as wei * @param tokensSold - how much tokens have been sold this far * @param weiRaised - how much money has been raised this far * @param msgSender - who is the investor of this transaction * @param decimals - how many decimal units the token has * @return Amount of tokens the investor receives */ function calculatePrice(uint value, uint weiRaised, uint tokensSold, address msgSender, uint decimals) public constant returns (uint tokenAmount); } /** * Finalize agent defines what happens at the end of succeseful crowdsale. * * - Allocate tokens for founders, bounties and community * - Make tokens transferable * - etc. */ contract FinalizeAgent { function isFinalizeAgent() public constant returns(bool) { return true; } /** Return true if we can run finalizeCrowdsale() properly. * * This is a safety check function that doesn't allow crowdsale to begin * unless the finalizer has been set up properly. */ function isSane() public constant returns (bool); /** Called once by crowdsale finalize() if the sale was success. */ function finalizeCrowdsale(); } /* * ERC20 interface * see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 { uint public totalSupply; function balanceOf(address who) constant returns (uint); function allowance(address owner, address spender) constant returns (uint); function transfer(address to, uint value) returns (bool ok); function transferFrom(address from, address to, uint value) returns (bool ok); function approve(address spender, uint value) returns (bool ok); event Transfer(address indexed from, address indexed to, uint value); event Approval(address indexed owner, address indexed spender, uint value); } /** * A token that defines fractional units as decimals. */ contract FractionalERC20 is ERC20 { uint public decimals; } /** * Abstract base contract for token sales. * * Handle * - start and end dates * - accepting investments * - minimum funding goal and refund * - various statistics during the crowdfund * - different pricing strategies * - different investment policies (require server side customer id, allow only whitelisted addresses) * */ contract Crowdsale is Haltable { /* Max investment count when we are still allowed to change the multisig address */ uint public MAX_INVESTMENTS_BEFORE_MULTISIG_CHANGE = 5; using SafeMathLib for uint; /* The token we are selling */ FractionalERC20 public token; /* How we are going to price our offering */ PricingStrategy public pricingStrategy; /* Post-success callback */ FinalizeAgent public finalizeAgent; /* tokens will be transfered from this address */ address public multisigWallet; /* if the funding goal is not reached, investors may withdraw their funds */ uint public minimumFundingGoal; /* the UNIX timestamp start date of the crowdsale */ uint public startsAt; /* the UNIX timestamp end date of the crowdsale */ uint public endsAt; /* the number of tokens already sold through this contract*/ uint public tokensSold = 0; /* How many wei of funding we have raised */ uint public weiRaised = 0; /* How many distinct addresses have invested */ uint public investorCount = 0; /* How much wei we have returned back to the contract after a failed crowdfund. */ uint public loadedRefund = 0; /* How much wei we have given back to investors.*/ uint public weiRefunded = 0; /* Has this crowdsale been finalized */ bool public finalized; /* Do we need to have unique contributor id for each customer */ bool public requireCustomerId; /** * Do we verify that contributor has been cleared on the server side (accredited investors only). * This method was first used in FirstBlood crowdsale to ensure all contributors have accepted terms on sale (on the web). */ bool public requiredSignedAddress; /* Server side address that signed allowed contributors (Ethereum addresses) that can participate the crowdsale */ address public signerAddress; /** How much ETH each address has invested to this crowdsale */ mapping (address => uint256) public investedAmountOf; /** How much tokens this crowdsale has credited for each investor address */ mapping (address => uint256) public tokenAmountOf; /** Addresses that are allowed to invest even before ICO offical opens. For testing, for ICO partners, etc. */ mapping (address => bool) public earlyParticipantWhitelist; /** This is for manul testing for the interaction from owner wallet. You can set it to any value and inspect this in blockchain explorer to see that crowdsale interaction works. */ uint public ownerTestValue; /** State machine * * - Preparing: All contract initialization calls and variables have not been set yet * - Prefunding: We have not passed start time yet * - Funding: Active crowdsale * - Success: Minimum funding goal reached * - Failure: Minimum funding goal not reached before ending time * - Finalized: The finalized has been called and succesfully executed * - Refunding: Refunds are loaded on the contract for reclaim. */ enum State{Unknown, Preparing, PreFunding, Funding, Success, Failure, Finalized, Refunding} // A new investment was made event Invested(address investor, uint weiAmount, uint tokenAmount, uint128 customerId); // Refund was processed for a contributor event Refund(address investor, uint weiAmount); // The rules were changed what kind of investments we accept event InvestmentPolicyChanged(bool requireCustomerId, bool requiredSignedAddress, address signerAddress); // Address early participation whitelist status changed event Whitelisted(address addr, bool status); // Crowdsale end time has been changed event EndsAtChanged(uint endsAt); function Crowdsale(address _token, PricingStrategy _pricingStrategy, address _multisigWallet, uint _start, uint _end, uint _minimumFundingGoal) { owner = msg.sender; token = FractionalERC20(_token); setPricingStrategy(_pricingStrategy); multisigWallet = _multisigWallet; if(multisigWallet == 0) { throw; } if(_start == 0) { throw; } startsAt = _start; if(_end == 0) { throw; } endsAt = _end; // Don't mess the dates if(startsAt >= endsAt) { throw; } // Minimum funding goal can be zero minimumFundingGoal = _minimumFundingGoal; } /** * Don't expect to just send in money and get tokens. */ function() payable { throw; } /** * Make an investment. * * Crowdsale must be running for one to invest. * We must have not pressed the emergency brake. * * @param receiver The Ethereum address who receives the tokens * @param customerId (optional) UUID v4 to track the successful payments on the server side * */ function investInternal(address receiver, uint128 customerId) stopInEmergency private { // Determine if it's a good time to accept investment from this participant if(getState() == State.PreFunding) { // Are we whitelisted for early deposit if(!earlyParticipantWhitelist[receiver]) { throw; } } else if(getState() == State.Funding) { // Retail participants can only come in when the crowdsale is running // pass } else { // Unwanted state throw; } uint weiAmount = msg.value; uint tokenAmount = pricingStrategy.calculatePrice(weiAmount, weiRaised, tokensSold, msg.sender, token.decimals()); if(tokenAmount == 0) { // Dust transaction throw; } if(investedAmountOf[receiver] == 0) { // A new investor investorCount++; } // Update investor investedAmountOf[receiver] = investedAmountOf[receiver].plus(weiAmount); tokenAmountOf[receiver] = tokenAmountOf[receiver].plus(tokenAmount); // Update totals weiRaised = weiRaised.plus(weiAmount); tokensSold = tokensSold.plus(tokenAmount); // Check that we did not bust the cap if(isBreakingCap(weiAmount, tokenAmount, weiRaised, tokensSold)) { throw; } assignTokens(receiver, tokenAmount); // Pocket the money if(!multisigWallet.send(weiAmount)) throw; // Tell us invest was success Invested(receiver, weiAmount, tokenAmount, customerId); } /** * Preallocate tokens for the early investors. * * Preallocated tokens have been sold before the actual crowdsale opens. * This function mints the tokens and moves the crowdsale needle. * * Investor count is not handled; it is assumed this goes for multiple investors * and the token distribution happens outside the smart contract flow. * * No money is exchanged, as the crowdsale team already have received the payment. * * @param fullTokens tokens as full tokens - decimal places added internally * @param weiPrice Price of a single full token in wei * */ function preallocate(address receiver, uint fullTokens, uint weiPrice) public onlyOwner { uint tokenAmount = fullTokens * 10**token.decimals(); uint weiAmount = weiPrice * fullTokens; // This can be also 0, we give out tokens for free weiRaised = weiRaised.plus(weiAmount); tokensSold = tokensSold.plus(tokenAmount); investedAmountOf[receiver] = investedAmountOf[receiver].plus(weiAmount); tokenAmountOf[receiver] = tokenAmountOf[receiver].plus(tokenAmount); assignTokens(receiver, tokenAmount); // Tell us invest was success Invested(receiver, weiAmount, tokenAmount, 0); } /** * Allow anonymous contributions to this crowdsale. */ function investWithSignedAddress(address addr, uint128 customerId, uint8 v, bytes32 r, bytes32 s) public payable { bytes32 hash = sha256(addr); if (ecrecover(hash, v, r, s) != signerAddress) throw; if(customerId == 0) throw; // UUIDv4 sanity check investInternal(addr, customerId); } /** * Track who is the customer making the payment so we can send thank you email. */ function investWithCustomerId(address addr, uint128 customerId) public payable { if(requiredSignedAddress) throw; // Crowdsale allows only server-side signed participants if(customerId == 0) throw; // UUIDv4 sanity check investInternal(addr, customerId); } /** * Allow anonymous contributions to this crowdsale. */ function invest(address addr) public payable { if(requireCustomerId) throw; // Crowdsale needs to track partipants for thank you email if(requiredSignedAddress) throw; // Crowdsale allows only server-side signed participants investInternal(addr, 0); } /** * Invest to tokens, recognize the payer and clear his address. * */ function buyWithSignedAddress(uint128 customerId, uint8 v, bytes32 r, bytes32 s) public payable { investWithSignedAddress(msg.sender, customerId, v, r, s); } /** * Invest to tokens, recognize the payer. * */ function buyWithCustomerId(uint128 customerId) public payable { investWithCustomerId(msg.sender, customerId); } /** * The basic entry point to participate the crowdsale process. * * Pay for funding, get invested tokens back in the sender address. */ function buy() public payable { invest(msg.sender); } /** * Finalize a succcesful crowdsale. * * The owner can triggre a call the contract that provides post-crowdsale actions, like releasing the tokens. */ function finalize() public inState(State.Success) onlyOwner stopInEmergency { // Already finalized if(finalized) { throw; } // Finalizing is optional. We only call it if we are given a finalizing agent. if(address(finalizeAgent) != 0) { finalizeAgent.finalizeCrowdsale(); } finalized = true; } /** * Allow to (re)set finalize agent. * * Design choice: no state restrictions on setting this, so that we can fix fat finger mistakes. */ function setFinalizeAgent(FinalizeAgent addr) onlyOwner { finalizeAgent = addr; // Don't allow setting bad agent if(!finalizeAgent.isFinalizeAgent()) { throw; } } /** * Set policy do we need to have server-side customer ids for the investments. * */ function setRequireCustomerId(bool value) onlyOwner { requireCustomerId = value; InvestmentPolicyChanged(requireCustomerId, requiredSignedAddress, signerAddress); } /** * Set policy if all investors must be cleared on the server side first. * * This is e.g. for the accredited investor clearing. * */ function setRequireSignedAddress(bool value, address _signerAddress) onlyOwner { requiredSignedAddress = value; signerAddress = _signerAddress; InvestmentPolicyChanged(requireCustomerId, requiredSignedAddress, signerAddress); } /** * Allow addresses to do early participation. * * TODO: Fix spelling error in the name */ function setEarlyParicipantWhitelist(address addr, bool status) onlyOwner { earlyParticipantWhitelist[addr] = status; Whitelisted(addr, status); } /** * Allow crowdsale owner to close early or extend the crowdsale. * * This is useful e.g. for a manual soft cap implementation: * - after X amount is reached determine manual closing * * This may put the crowdsale to an invalid state, * but we trust owners know what they are doing. * */ function setEndsAt(uint time) onlyOwner { if(now > time) { throw; // Don't change past } endsAt = time; EndsAtChanged(endsAt); } /** * Allow to (re)set pricing strategy. * * Design choice: no state restrictions on the set, so that we can fix fat finger mistakes. */ function setPricingStrategy(PricingStrategy _pricingStrategy) onlyOwner { pricingStrategy = _pricingStrategy; // Don't allow setting bad agent if(!pricingStrategy.isPricingStrategy()) { throw; } } /** * Allow to change the team multisig address in the case of emergency. * * This allows to save a deployed crowdsale wallet in the case the crowdsale has not yet begun * (we have done only few test transactions). After the crowdsale is going * then multisig address stays locked for the safety reasons. */ function setMultisig(address addr) public onlyOwner { // Change if(investorCount > MAX_INVESTMENTS_BEFORE_MULTISIG_CHANGE) { throw; } multisigWallet = addr; } /** * Allow load refunds back on the contract for the refunding. * * The team can transfer the funds back on the smart contract in the case the minimum goal was not reached.. */ function loadRefund() public payable inState(State.Failure) { if(msg.value == 0) throw; loadedRefund = loadedRefund.plus(msg.value); } /** * Investors can claim refund. * * Note that any refunds from proxy buyers should be handled separately, * and not through this contract. */ function refund() public inState(State.Refunding) { uint256 weiValue = investedAmountOf[msg.sender]; if (weiValue == 0) throw; investedAmountOf[msg.sender] = 0; weiRefunded = weiRefunded.plus(weiValue); Refund(msg.sender, weiValue); if (!msg.sender.send(weiValue)) throw; } /** * @return true if the crowdsale has raised enough money to be a successful. */ function isMinimumGoalReached() public constant returns (bool reached) { return weiRaised >= minimumFundingGoal; } /** * Check if the contract relationship looks good. */ function isFinalizerSane() public constant returns (bool sane) { return finalizeAgent.isSane(); } /** * Check if the contract relationship looks good. */ function isPricingSane() public constant returns (bool sane) { return pricingStrategy.isSane(address(this)); } /** * Crowdfund state machine management. * * We make it a function and do not assign the result to a variable, so there is no chance of the variable being stale. */ function getState() public constant returns (State) { if(finalized) return State.Finalized; else if (address(finalizeAgent) == 0) return State.Preparing; else if (!finalizeAgent.isSane()) return State.Preparing; else if (!pricingStrategy.isSane(address(this))) return State.Preparing; else if (block.timestamp < startsAt) return State.PreFunding; else if (block.timestamp <= endsAt && !isCrowdsaleFull()) return State.Funding; else if (isMinimumGoalReached()) return State.Success; else if (!isMinimumGoalReached() && weiRaised > 0 && loadedRefund >= weiRaised) return State.Refunding; else return State.Failure; } /** This is for manual testing of multisig wallet interaction */ function setOwnerTestValue(uint val) onlyOwner { ownerTestValue = val; } /** Interface marker. */ function isCrowdsale() public constant returns (bool) { return true; } // // Modifiers // /** Modified allowing execution only if the crowdsale is currently running. */ modifier inState(State state) { if(getState() != state) throw; _; } // // Abstract functions // /** * Check if the current invested breaks our cap rules. * * * The child contract must define their own cap setting rules. * We allow a lot of flexibility through different capping strategies (ETH, token count) * Called from invest(). * * @param weiAmount The amount of wei the investor tries to invest in the current transaction * @param tokenAmount The amount of tokens we try to give to the investor in the current transaction * @param weiRaisedTotal What would be our total raised balance after this transaction * @param tokensSoldTotal What would be our total sold tokens count after this transaction * * @return true if taking this investment would break our cap rules */ function isBreakingCap(uint weiAmount, uint tokenAmount, uint weiRaisedTotal, uint tokensSoldTotal) constant returns (bool limitBroken); /** * Check if the current crowdsale is full and we can no longer sell any tokens. */ function isCrowdsaleFull() public constant returns (bool); /** * Create new tokens or transfer issued tokens to the investor depending on the cap model. */ function assignTokens(address receiver, uint tokenAmount) private; } /** * Standard ERC20 token with Short Hand Attack and approve() race condition mitigation. * * Based on code by FirstBlood: * https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, SafeMath { /* Token supply got increased and a new owner received these tokens */ event Minted(address receiver, uint amount); /* Actual balances of token holders */ mapping(address => uint) balances; /* approve() allowances */ mapping (address => mapping (address => uint)) allowed; /* Interface declaration */ function isToken() public constant returns (bool weAre) { return true; } function transfer(address _to, uint _value) returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], _value); balances[_to] = safeAdd(balances[_to], _value); Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint _value) returns (bool success) { uint _allowance = allowed[_from][msg.sender]; balances[_to] = safeAdd(balances[_to], _value); balances[_from] = safeSub(balances[_from], _value); allowed[_from][msg.sender] = safeSub(_allowance, _value); Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) constant returns (uint balance) { return balances[_owner]; } function approve(address _spender, uint _value) returns (bool success) { // To change the approve amount you first have to reduce the addresses` // allowance to zero by calling `approve(_spender, 0)` if it is not // already 0 to mitigate the race condition described here: // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint remaining) { return allowed[_owner][_spender]; } } /** * Collect funds from presale investors, buy tokens for them in a single transaction and distribute out tokens. * * - Collect funds from pre-sale investors * - Send funds to the crowdsale when it opens * - Allow owner to set the crowdsale * - Have refund after X days as a safety hatch if the crowdsale doesn't materilize * - Allow unlimited investors * - Tokens are distributed on PreICOProxyBuyer smart contract first * - The original investors can claim their tokens from the smart contract after the token transfer has been released * - All functions can be halted by owner if something goes wrong * */ contract PreICOProxyBuyer is Ownable, Haltable, SafeMath { /** How many investors we have now */ uint public investorCount; /** How many wei we have raised totla. */ uint public weiRaisedTotal; /** Who are our investors (iterable) */ address[] public investors; /** How much they have invested */ mapping(address => uint) public balances; /** How many tokens investors have claimed */ mapping(address => uint) public claimed; /** When our refund freeze is over (UNIT timestamp) */ uint public freezeEndsAt; /** What is the minimum buy in */ uint public weiMinimumLimit; /** What is the maximum buy in */ uint public weiMaximumLimit; /** How many weis total we are allowed to collect. */ uint public weiCap; /** How many tokens were bought */ uint public tokensBought; /** How many investors have claimed their tokens */ uint public claimCount; uint public totalClaimed; /** Our ICO contract where we will move the funds */ Crowdsale public crowdsale; /** What is our current state. */ enum State{Unknown, Funding, Distributing, Refunding} /** Somebody loaded their investment money */ event Invested(address investor, uint value, uint128 customerId); /** Refund claimed */ event Refunded(address investor, uint value); /** We executed our buy */ event TokensBoughts(uint count); /** We distributed tokens to an investor */ event Distributed(address investors, uint count); /** * Create presale contract where lock up period is given days */ function PreICOProxyBuyer(address _owner, uint _freezeEndsAt, uint _weiMinimumLimit, uint _weiMaximumLimit, uint _weiCap) { owner = _owner; // Give argument if(_freezeEndsAt == 0) { throw; } // Give argument if(_weiMinimumLimit == 0) { throw; } if(_weiMaximumLimit == 0) { throw; } weiMinimumLimit = _weiMinimumLimit; weiMaximumLimit = _weiMaximumLimit; weiCap = _weiCap; freezeEndsAt = _freezeEndsAt; } /** * Get the token we are distributing. */ function getToken() public constant returns(FractionalERC20) { if(address(crowdsale) == 0) { throw; } return crowdsale.token(); } /** * Participate to a presale. */ function invest(uint128 customerId) private { // Cannot invest anymore through crowdsale when moving has begun if(getState() != State.Funding) throw; if(msg.value == 0) throw; // No empty buys address investor = msg.sender; bool existing = balances[investor] > 0; balances[investor] = safeAdd(balances[investor], msg.value); // Need to satisfy minimum and maximum limits if(balances[investor] < weiMinimumLimit || balances[investor] > weiMaximumLimit) { throw; } // This is a new investor if(!existing) { investors.push(investor); investorCount++; } weiRaisedTotal = safeAdd(weiRaisedTotal, msg.value); if(weiRaisedTotal > weiCap) { throw; } Invested(investor, msg.value, customerId); } function investWithId(uint128 customerId) public stopInEmergency payable { invest(customerId); } function investWithoutId() public stopInEmergency payable { invest(0x0); } /** * Load funds to the crowdsale for all investors. * * */ function buyForEverybody() stopInEmergency public { if(getState() != State.Funding) { // Only allow buy once throw; } // Crowdsale not yet set if(address(crowdsale) == 0) throw; // Buy tokens on the contract crowdsale.invest.value(weiRaisedTotal)(address(this)); // Record how many tokens we got tokensBought = getToken().balanceOf(address(this)); if(tokensBought == 0) { // Did not get any tokens throw; } TokensBoughts(tokensBought); } /** * How may tokens each investor gets. */ function getClaimAmount(address investor) public constant returns (uint) { // Claims can be only made if we manage to buy tokens if(getState() != State.Distributing) { throw; } return safeMul(balances[investor], tokensBought) / weiRaisedTotal; } /** * How many tokens remain unclaimed for an investor. */ function getClaimLeft(address investor) public constant returns (uint) { return safeSub(getClaimAmount(investor), claimed[investor]); } /** * Claim all remaining tokens for this investor. */ function claimAll() { claim(getClaimLeft(msg.sender)); } /** * Claim N bought tokens to the investor as the msg sender. * */ function claim(uint amount) stopInEmergency { address investor = msg.sender; if(amount == 0) { throw; } if(getClaimLeft(investor) < amount) { // Woops we cannot get more than we have left throw; } // We track who many investor have (partially) claimed their tokens if(claimed[investor] == 0) { claimCount++; } claimed[investor] = safeAdd(claimed[investor], amount); totalClaimed = safeAdd(totalClaimed, amount); getToken().transfer(investor, amount); Distributed(investor, amount); } /** * ICO never happened. Allow refund. */ function refund() stopInEmergency { // Trying to ask refund too soon if(getState() != State.Refunding) throw; address investor = msg.sender; if(balances[investor] == 0) throw; uint amount = balances[investor]; delete balances[investor]; if(!(investor.call.value(amount)())) throw; Refunded(investor, amount); } /** * Set the target crowdsale where we will move presale funds when the crowdsale opens. */ function setCrowdsale(Crowdsale _crowdsale) public onlyOwner { crowdsale = _crowdsale; // Check interface if(!crowdsale.isCrowdsale()) true; } /** * Resolve the contract umambigious state. */ function getState() public returns(State) { if(tokensBought == 0) { if(now >= freezeEndsAt) { return State.Refunding; } else { return State.Funding; } } else { return State.Distributing; } } /** Explicitly call function from your wallet. */ function() payable { throw; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":true,"inputs":[],"name":"weiMinimumLimit","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"getState","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"customerId","type":"uint128"}],"name":"investWithId","outputs":[],"payable":true,"type":"function"},{"constant":true,"inputs":[],"name":"getToken","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balances","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"claim","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"investor","type":"address"}],"name":"getClaimLeft","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"investors","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_crowdsale","type":"address"}],"name":"setCrowdsale","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"refund","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"halt","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"freezeEndsAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"tokensBought","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"weiCap","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"claimCount","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":"crowdsale","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"weiMaximumLimit","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"weiRaisedTotal","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"halted","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"claimed","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"unhalt","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"claimAll","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"buyForEverybody","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalClaimed","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"investorCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"investWithoutId","outputs":[],"payable":true,"type":"function"},{"constant":true,"inputs":[{"name":"investor","type":"address"}],"name":"getClaimAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"type":"function"},{"inputs":[{"name":"_owner","type":"address"},{"name":"_freezeEndsAt","type":"uint256"},{"name":"_weiMinimumLimit","type":"uint256"},{"name":"_weiMaximumLimit","type":"uint256"},{"name":"_weiCap","type":"uint256"}],"payable":false,"type":"constructor"},{"payable":true,"type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"investor","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"customerId","type":"uint128"}],"name":"Invested","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"investor","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Refunded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"count","type":"uint256"}],"name":"TokensBoughts","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"investors","type":"address"},{"indexed":false,"name":"count","type":"uint256"}],"name":"Distributed","type":"event"}]
Contract Creation Code
6060604052346100005760405160a080610fc583398101604090815281516020830151918301516060840151608090940151919390915b5b60008054600160a060020a03191633600160a060020a03161790555b60008054600160a060020a031916600160a060020a03871617905583151561007a57610000565b82151561008657610000565b81151561009257610000565b60078390556008829055600981905560068490555b50505050505b610f09806100bc6000396000f300606060405236156101595763ffffffff60e060020a6000350416631540fe2281146101665780631865c57d146101855780631fb00cdc146101b357806321df0da7146101d257806327e235e3146101fb578063379607f5146102265780633c67b6b7146102385780633feb5f2b14610263578063483a20b21461028f578063590e1ae3146102aa5780635ed7ca5b146102b95780636962b010146102c8578063732783ac146102e757806384fe5029146103065780638da4d3c9146103255780638da5cb5b146103445780639c1e03a01461036d578063aa5581ef14610396578063b3ebc3da146103b5578063b9b8af0b146103d4578063c884ef83146103f5578063cb3e64fd14610420578063d1058e591461042f578063d46070481461043e578063d54ad2a11461044d578063d7e64c001461046c578063dbb833df1461048b578063dde070e814610495578063f2fde38b146104c0575b6101645b610000565b565b005b34610000576101736104db565b60408051918252519081900360200190f35b34610000576101926104e1565b6040518082600381116100005760ff16815260200191505060405180910390f35b6101646fffffffffffffffffffffffffffffffff60043516610514565b005b34610000576101df610539565b60408051600160a060020a039092168252519081900360200190f35b3461000057610173600160a060020a03600435166105cb565b60408051918252519081900360200190f35b34610000576101646004356105dd565b005b3461000057610173600160a060020a0360043516610750565b60408051918252519081900360200190f35b34610000576101df600435610784565b60408051600160a060020a039092168252519081900360200190f35b3461000057610164600160a060020a03600435166107b4565b005b3461000057610164610865565b005b346100005761016461094f565b005b3461000057610173610992565b60408051918252519081900360200190f35b3461000057610173610998565b60408051918252519081900360200190f35b346100005761017361099e565b60408051918252519081900360200190f35b34610000576101736109a4565b60408051918252519081900360200190f35b34610000576101df6109aa565b60408051600160a060020a039092168252519081900360200190f35b34610000576101df6109b9565b60408051600160a060020a039092168252519081900360200190f35b34610000576101736109c8565b60408051918252519081900360200190f35b34610000576101736109ce565b60408051918252519081900360200190f35b34610000576103e16109d4565b604080519115158252519081900360200190f35b3461000057610173600160a060020a03600435166109e4565b60408051918252519081900360200190f35b34610000576101646109f6565b005b3461000057610164610a4c565b005b3461000057610164610a60565b005b3461000057610173610bdc565b60408051918252519081900360200190f35b3461000057610173610be2565b60408051918252519081900360200190f35b610164610be8565b005b3461000057610173600160a060020a0360043516610c0d565b60408051918252519081900360200190f35b3461000057610164600160a060020a0360043516610c63565b005b60075481565b6000600a546000141561050c5760065442106104ff57506003610510565b506001610510565b610510565b5060025b5b90565b60005460a060020a900460ff161561052b57610000565b61053481610cbb565b5b5b50565b600d54600090600160a060020a0316151561055357610000565b600d54604080516000602091820181905282517ffc0c546a0000000000000000000000000000000000000000000000000000000081529251600160a060020a039094169363fc0c546a9360048082019493918390030190829087803b156100005760325a03f115610000575050604051519150505b90565b60046020526000908152604090205481565b6000805460a060020a900460ff16156105f557610000565b503381151561060357610000565b8161060d82610750565b101561061857610000565b600160a060020a038116600090815260056020526040902054151561064157600b805460010190555b600160a060020a0381166000908152600560205260409020546106649083610e60565b600160a060020a038216600090815260056020526040902055600c5461068a9083610e60565b600c55610695610539565b600160a060020a031663a9059cbb82846000604051602001526040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b156100005760325a03f11561000057505060408051600160a060020a03841681526020810185905281517fb649c98f58055c520df0dcb5709eff2e931217ff2fb1e21376130d31bbb1c0af93509081900390910190a15b5b5050565b600061077c61075e83610c0d565b600160a060020a038416600090815260056020526040902054610e88565b90505b919050565b600381815481101561000057906000526020600020900160005b915054906101000a9004600160a060020a031681565b60005433600160a060020a039081169116146107cf57610000565b600d805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038381169190911791829055604080516000602091820181905282517f4551dd5900000000000000000000000000000000000000000000000000000000815292519490931693634551dd59936004808501948390030190829087803b156100005760325a03f115610000575050505b5b5b50565b60008054819060a060020a900460ff161561087f57610000565b60036108896104e1565b60038111610000571461089b57610000565b33600160a060020a03811660009081526004602052604090205490925015156108c357610000565b50600160a060020a038116600081815260046020526040808220805490839055905190929183919081818185876185025a03f192505050151561090557610000565b60408051600160a060020a03841681526020810183905281517fd7dee2702d63ad89917b6a4da9981c90c4d24f8c2bdfd64c604ecae57d8d0651929181900390910190a15b5b5050565b60005433600160a060020a0390811691161461096a57610000565b6000805474ff0000000000000000000000000000000000000000191660a060020a1790555b5b565b60065481565b600a5481565b60095481565b600b5481565b600054600160a060020a031681565b600d54600160a060020a031681565b60085481565b60025481565b60005460a060020a900460ff1681565b60056020526000908152604090205481565b60005433600160a060020a03908116911614610a1157610000565b60005460a060020a900460ff161515610a2957610000565b6000805474ff0000000000000000000000000000000000000000191690555b5b5b565b610162610a5833610750565b6105dd565b5b565b60005460a060020a900460ff1615610a7757610000565b6001610a816104e1565b600381116100005714610a9357610000565b600d54600160a060020a03161515610aaa57610000565b600d54600254604080517f03f9c793000000000000000000000000000000000000000000000000000000008152600160a060020a033081166004830152915191909316926303f9c7939291602480830192600092919082900301818588803b156100005761235a5a03f1156100005750505050610b25610539565b600160a060020a03166370a08231306000604051602001526040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b156100005760325a03f11561000057505060405151600a81905515159050610ba357610000565b600a5460408051918252517f6e1e34c7e3c3bcd68cb35ee1352c9d7320d7d1ab8ff8402c789a235f368a993e9181900360200190a15b5b565b600c5481565b60015481565b60005460a060020a900460ff1615610bff57610000565b6101626000610cbb565b5b5b565b60006002610c196104e1565b600381116100005714610c2b57610000565b600254600160a060020a038316600090815260046020526040902054600a54610c549190610ea1565b8115610000570490505b919050565b60005433600160a060020a03908116911614610c7e57610000565b600160a060020a03811615610534576000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b5b50565b6000806001610cc86104e1565b600381116100005714610cda57610000565b341515610ce657610000565b505033600160a060020a03811660009081526004602052604081205490811190610d109034610e60565b600160a060020a0383166000908152600460205260409020819055600754901080610d545750600854600160a060020a038316600090815260046020526040902054115b15610d5e57610000565b801515610de15760038054806001018281815481835581811511610da757600083815260209020610da79181019083015b80821115610da35760008155600101610d8f565b5090565b5b505050916000526020600020900160005b8154600160a060020a038087166101009390930a928302920219161790555060018054810190555b610ded60025434610e60565b6002819055600954901115610e0157610000565b60408051600160a060020a03841681523460208201526fffffffffffffffffffffffffffffffff85168183015290517f32326b44584c151e5de3f56e61f6c3ab2a7ffe391bdda0ff970d431332f88c589181900360600190a15b505050565b6000828201610e7d848210801590610e785750838210155b610ecd565b8091505b5092915050565b6000610e9683831115610ecd565b508082035b92915050565b6000828202610e7d841580610e78575083858381156100005704145b610ecd565b8091505b5092915050565b80151561053457610000565b5b505600a165627a7a7230582074c646fdf673ebb5c00461d0aa6754bac8fed5ee0f62c0d691722b70024498de00290000000000000000000000006efd5665ab4b345a7ebe63c679b651f375dddb7e000000000000000000000000000000000000000000000000000000005a2000d0000000000000000000000000000000000000000000000002b38aaae9f479c4cf00000000000000000000000000000000000000000008459508334a94a29c0000000000000000000000000000000000000000000000000fd4008172d91bf25b91
Deployed Bytecode
0x606060405236156101595763ffffffff60e060020a6000350416631540fe2281146101665780631865c57d146101855780631fb00cdc146101b357806321df0da7146101d257806327e235e3146101fb578063379607f5146102265780633c67b6b7146102385780633feb5f2b14610263578063483a20b21461028f578063590e1ae3146102aa5780635ed7ca5b146102b95780636962b010146102c8578063732783ac146102e757806384fe5029146103065780638da4d3c9146103255780638da5cb5b146103445780639c1e03a01461036d578063aa5581ef14610396578063b3ebc3da146103b5578063b9b8af0b146103d4578063c884ef83146103f5578063cb3e64fd14610420578063d1058e591461042f578063d46070481461043e578063d54ad2a11461044d578063d7e64c001461046c578063dbb833df1461048b578063dde070e814610495578063f2fde38b146104c0575b6101645b610000565b565b005b34610000576101736104db565b60408051918252519081900360200190f35b34610000576101926104e1565b6040518082600381116100005760ff16815260200191505060405180910390f35b6101646fffffffffffffffffffffffffffffffff60043516610514565b005b34610000576101df610539565b60408051600160a060020a039092168252519081900360200190f35b3461000057610173600160a060020a03600435166105cb565b60408051918252519081900360200190f35b34610000576101646004356105dd565b005b3461000057610173600160a060020a0360043516610750565b60408051918252519081900360200190f35b34610000576101df600435610784565b60408051600160a060020a039092168252519081900360200190f35b3461000057610164600160a060020a03600435166107b4565b005b3461000057610164610865565b005b346100005761016461094f565b005b3461000057610173610992565b60408051918252519081900360200190f35b3461000057610173610998565b60408051918252519081900360200190f35b346100005761017361099e565b60408051918252519081900360200190f35b34610000576101736109a4565b60408051918252519081900360200190f35b34610000576101df6109aa565b60408051600160a060020a039092168252519081900360200190f35b34610000576101df6109b9565b60408051600160a060020a039092168252519081900360200190f35b34610000576101736109c8565b60408051918252519081900360200190f35b34610000576101736109ce565b60408051918252519081900360200190f35b34610000576103e16109d4565b604080519115158252519081900360200190f35b3461000057610173600160a060020a03600435166109e4565b60408051918252519081900360200190f35b34610000576101646109f6565b005b3461000057610164610a4c565b005b3461000057610164610a60565b005b3461000057610173610bdc565b60408051918252519081900360200190f35b3461000057610173610be2565b60408051918252519081900360200190f35b610164610be8565b005b3461000057610173600160a060020a0360043516610c0d565b60408051918252519081900360200190f35b3461000057610164600160a060020a0360043516610c63565b005b60075481565b6000600a546000141561050c5760065442106104ff57506003610510565b506001610510565b610510565b5060025b5b90565b60005460a060020a900460ff161561052b57610000565b61053481610cbb565b5b5b50565b600d54600090600160a060020a0316151561055357610000565b600d54604080516000602091820181905282517ffc0c546a0000000000000000000000000000000000000000000000000000000081529251600160a060020a039094169363fc0c546a9360048082019493918390030190829087803b156100005760325a03f115610000575050604051519150505b90565b60046020526000908152604090205481565b6000805460a060020a900460ff16156105f557610000565b503381151561060357610000565b8161060d82610750565b101561061857610000565b600160a060020a038116600090815260056020526040902054151561064157600b805460010190555b600160a060020a0381166000908152600560205260409020546106649083610e60565b600160a060020a038216600090815260056020526040902055600c5461068a9083610e60565b600c55610695610539565b600160a060020a031663a9059cbb82846000604051602001526040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b156100005760325a03f11561000057505060408051600160a060020a03841681526020810185905281517fb649c98f58055c520df0dcb5709eff2e931217ff2fb1e21376130d31bbb1c0af93509081900390910190a15b5b5050565b600061077c61075e83610c0d565b600160a060020a038416600090815260056020526040902054610e88565b90505b919050565b600381815481101561000057906000526020600020900160005b915054906101000a9004600160a060020a031681565b60005433600160a060020a039081169116146107cf57610000565b600d805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038381169190911791829055604080516000602091820181905282517f4551dd5900000000000000000000000000000000000000000000000000000000815292519490931693634551dd59936004808501948390030190829087803b156100005760325a03f115610000575050505b5b5b50565b60008054819060a060020a900460ff161561087f57610000565b60036108896104e1565b60038111610000571461089b57610000565b33600160a060020a03811660009081526004602052604090205490925015156108c357610000565b50600160a060020a038116600081815260046020526040808220805490839055905190929183919081818185876185025a03f192505050151561090557610000565b60408051600160a060020a03841681526020810183905281517fd7dee2702d63ad89917b6a4da9981c90c4d24f8c2bdfd64c604ecae57d8d0651929181900390910190a15b5b5050565b60005433600160a060020a0390811691161461096a57610000565b6000805474ff0000000000000000000000000000000000000000191660a060020a1790555b5b565b60065481565b600a5481565b60095481565b600b5481565b600054600160a060020a031681565b600d54600160a060020a031681565b60085481565b60025481565b60005460a060020a900460ff1681565b60056020526000908152604090205481565b60005433600160a060020a03908116911614610a1157610000565b60005460a060020a900460ff161515610a2957610000565b6000805474ff0000000000000000000000000000000000000000191690555b5b5b565b610162610a5833610750565b6105dd565b5b565b60005460a060020a900460ff1615610a7757610000565b6001610a816104e1565b600381116100005714610a9357610000565b600d54600160a060020a03161515610aaa57610000565b600d54600254604080517f03f9c793000000000000000000000000000000000000000000000000000000008152600160a060020a033081166004830152915191909316926303f9c7939291602480830192600092919082900301818588803b156100005761235a5a03f1156100005750505050610b25610539565b600160a060020a03166370a08231306000604051602001526040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b156100005760325a03f11561000057505060405151600a81905515159050610ba357610000565b600a5460408051918252517f6e1e34c7e3c3bcd68cb35ee1352c9d7320d7d1ab8ff8402c789a235f368a993e9181900360200190a15b5b565b600c5481565b60015481565b60005460a060020a900460ff1615610bff57610000565b6101626000610cbb565b5b5b565b60006002610c196104e1565b600381116100005714610c2b57610000565b600254600160a060020a038316600090815260046020526040902054600a54610c549190610ea1565b8115610000570490505b919050565b60005433600160a060020a03908116911614610c7e57610000565b600160a060020a03811615610534576000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b5b50565b6000806001610cc86104e1565b600381116100005714610cda57610000565b341515610ce657610000565b505033600160a060020a03811660009081526004602052604081205490811190610d109034610e60565b600160a060020a0383166000908152600460205260409020819055600754901080610d545750600854600160a060020a038316600090815260046020526040902054115b15610d5e57610000565b801515610de15760038054806001018281815481835581811511610da757600083815260209020610da79181019083015b80821115610da35760008155600101610d8f565b5090565b5b505050916000526020600020900160005b8154600160a060020a038087166101009390930a928302920219161790555060018054810190555b610ded60025434610e60565b6002819055600954901115610e0157610000565b60408051600160a060020a03841681523460208201526fffffffffffffffffffffffffffffffff85168183015290517f32326b44584c151e5de3f56e61f6c3ab2a7ffe391bdda0ff970d431332f88c589181900360600190a15b505050565b6000828201610e7d848210801590610e785750838210155b610ecd565b8091505b5092915050565b6000610e9683831115610ecd565b508082035b92915050565b6000828202610e7d841580610e78575083858381156100005704145b610ecd565b8091505b5092915050565b80151561053457610000565b5b505600a165627a7a7230582074c646fdf673ebb5c00461d0aa6754bac8fed5ee0f62c0d691722b70024498de0029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000006efd5665ab4b345a7ebe63c679b651f375dddb7e000000000000000000000000000000000000000000000000000000005a2000d0000000000000000000000000000000000000000000000002b38aaae9f479c4cf00000000000000000000000000000000000000000008459508334a94a29c0000000000000000000000000000000000000000000000000fd4008172d91bf25b91
-----Decoded View---------------
Arg [0] : _owner (address): 0x6efD5665ab4B345A7eBE63c679b651f375DDdB7E
Arg [1] : _freezeEndsAt (uint256): 1512046800
Arg [2] : _weiMinimumLimit (uint256): 49830828948799997135
Arg [3] : _weiMaximumLimit (uint256): 9999999000000000000000000
Arg [4] : _weiCap (uint256): 74746243423219901160337
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000006efd5665ab4b345a7ebe63c679b651f375dddb7e
Arg [1] : 000000000000000000000000000000000000000000000000000000005a2000d0
Arg [2] : 000000000000000000000000000000000000000000000002b38aaae9f479c4cf
Arg [3] : 00000000000000000000000000000000000000000008459508334a94a29c0000
Arg [4] : 000000000000000000000000000000000000000000000fd4008172d91bf25b91
Swarm Source
bzzr://74c646fdf673ebb5c00461d0aa6754bac8fed5ee0f62c0d691722b70024498de
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.